2012-04-03 11 views
5

ToggleButton सामग्री बनाने के लिए सबसे कमजोर तरीका क्या है इसकी जांच की गई स्थिति पर निर्भर करता है?टॉगल बटन/चेकबॉक्स सामग्री इसके चेक किए गए राज्य के आधार पर?

डब्ल्यूपीएफ में मैं शायद DataTrigger के लिए जाऊंगा जो सिल्वरलाइट में मौजूद नहीं है।

मैंने निम्नलिखित की कोशिश की, लेकिन जैसे ही मैं ट्रिगर शामिल करता हूं, यह काम नहीं करता है, स्रोत के लिए बाध्यकारी टूटा हुआ है। ट्रिगर्स वैसे भी काम नहीं करेंगे।

<ToggleButton 
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
IsChecked="{Binding IsArchived, Mode=TwoWay}"> 
    <i:Interaction.Triggers> 
    <i:EventTrigger EventName="Checked"> 
     <ei:ChangePropertyAction 
     TargetObject="{Binding 
     RelativeSource={RelativeSource AncestorType=ToggleButton}}" 
     PropertyName="Content" Value="Unarchive project"/> 
    </i:EventTrigger> 
    <i:EventTrigger EventName="Unchecked"> 
     <ei:ChangePropertyAction 
     TargetObject="{Binding 
     RelativeSource={RelativeSource AncestorType=ToggleButton}}" 
     PropertyName="Content" Value="Archive project"/> 
    </i:EventTrigger> 
    </i:Interaction.Triggers> 
</ToggleButton> 
+0

मेरा अपना तरीका के रूप में कम योग्य नहीं हैं, तो मैं एक टिप्पणी के रूप में पोस्ट कर रहा हूँ: ToggleButton टेम्पलेट ओवरराइड, दो पाठ बॉक्स का उपयोग करें, का उपयोग कर अपने दृश्यता गुण सेट विजुअलस्टेट प्रबंधक। – jv42

+0

@ jv42, जो पहली बार बाध्यकारी पर नियंत्रण को प्रभावित नहीं करेगा, केवल प्रतिपादन के बाद बदलते समय, [मेरा उत्तर] देखें (http://stackoverflow.com/a/9989048/75500) जो इसे हल करता है। – Shimmy

+0

मुझे इसके साथ कभी समस्या नहीं थी। शायद मुझे कुछ याद आया। – jv42

उत्तर

4
<ToggleButton Width="50" Height="50"> 
    <ToggleButton.Content> 
     <TextBlock x:Name="obj" Text="Foo"/> 
    </ToggleButton.Content> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Checked"> 
      <ei:ChangePropertyAction PropertyName="Text" Value="On" TargetName="obj"/> 
     </i:EventTrigger> 
     <i:EventTrigger EventName="Unchecked"> 
      <ei:ChangePropertyAction PropertyName="Text" Value="Off" TargetName="obj"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</ToggleButton> 
+0

मैंने चेंजप्रॉपर्टीएक्शन स्रोत कोड पर एक नज़र डाली, और यह टाइपकॉन्टर और प्रतिबिंब SetValue के संयोजन का उपयोग करता है, और किसी भी तरह यह इस तथ्य से गड़बड़ करता है कि सामग्री ऑब्जेक्ट है और आप इसे स्ट्रिंग सेट करते हैं। मैंने फैसला नहीं किया कि समय बिताना विवरण में इस कोड को समझने के लिए) –

1

मैं का उपयोग कर Kent Boogaart के converter समाप्त हो गया, अच्छा काम करता है, और यह भी बाध्य संपत्ति पर निर्भर है, एक नियंत्रण ट्रिगर जो सभी पर गोली नहीं हो सकता है पर नहीं (एक मामले में जहां संपत्ति नहीं दिया है 'टी वास्तव में सेट), यहाँ कोड है:

<ToggleButton.Content> 
    <Binding Path="IsArchived" 
    xmlns:boo="http://schemas.kent.boogaart.com/converters" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <Binding.Converter> 
     <boo:MapConverter> 
     <boo:Mapping To="Archive project"> 
      <boo:Mapping.From> 
      <sys:Boolean>false</sys:Boolean> 
      </boo:Mapping.From> 
     </boo:Mapping> 
     <boo:Mapping To="Unarchive project"> 
      <boo:Mapping.From> 
      <sys:Boolean>true</sys:Boolean> 
      </boo:Mapping.From> 
     </boo:Mapping> 
     </boo:MapConverter> 
    </Binding.Converter> 
    </Binding> 
</ToggleButton.Content> 
+0

मैं व्यक्तिगत रूप से एक्सएएमएल में इसे खोदने के बजाय, इस LOGIC को दृश्य मॉडल में डाल दूंगा। यह कम कोड है, और यह आपके इरादे को दृश्यमान बनाता है। मुझे अपने टीम के साथी XAML को छिपे हुए तर्क के लिए खोजना नफरत है। यदि आप अकेले काम करते हैं तो ठीक है, यद्यपि। –

+0

@AlexBurtsev मैं असहमत हूं। यह दृश्य परत का मामला है, व्यूमोडेल की नहीं, जिसका कर्तव्य है 'IsArchived' संपत्ति का खुलासा करना और जैसा कि यूआई अज्ञेयवादी रहता है। – Shimmy

+1

वीएम पैटर्न के उपयोग के आधार पर यह किसी भी तरह से मधुमक्खी हो सकता है। यह एक्सएएमएल या वीएम में कनवर्टर्स लाइव रहने का सवाल था, मैं दूसरे को पसंद करता हूं, जब वीएम डेटा का उपयोग करने के लिए तैयार है। आंशिक रूप से ऐसा इसलिए है क्योंकि "बाहरी" कनवर्टर्स क्षमताएं अक्सर सीमित होती हैं। –

संबंधित मुद्दे