2013-03-06 9 views
5

वहाँ WPF में ब्लेंड शैली Trigger रों अन्तरक्रियाशीलता नाम स्थान में पाया के बीच एक बड़ा अंतर है, और शैलियाँ, ControlTemplate रों, आदि के माध्यम से उपलब्ध क्लासिक Trigger कि, (मैं माना जाता है कि यह शायद सिल्वरलाइट पर भी लागू होता है)।ब्लेंड उत्प्रेरक मुझे ऐसा लगता है बनाम WPF उत्प्रेरक

WPF में, जब आप एक सेटटर के साथ Trigger सेट करते हैं, तो आपको दो व्यवहार मिलते हैं: यदि ट्रिगर की स्थिति पूरी हो जाती है, तो सेटटर लागू होता है। हालांकि, एक बार ट्रिगर अब संतुष्ट नहीं होता है, तो पिछले मान को बहाल किया जाता है। प्रोग्रामिंग यूआई के दौरान यह बेहद उपयोगी है।

मैं एक DataTrigger इसी तरह ब्लेंड तरीका का उपयोग कर कोड करने की कोशिश की है: मैं अपने नियंत्रण करने के लिए ChangePropertyAction लागू किया है, और यह अन्तरक्रियाशीलता DataTrigger के बंद को गति प्रदान मेरी ViewModel करने के लिए एक बाध्यकारी का उपयोग कर सकते है।

<Rectangle x:Name="SecondaryHighlightBackground" Fill="#FF505050"> 
      <i:Interaction.Triggers> 
       <ei:DataTrigger Binding="{Binding IsHighlighted}" Value="Value"> 
        <ei:ChangePropertyAction PropertyName="Opacity" Value="0.5"/> 
       </ei:DataTrigger> 
      </i:Interaction.Triggers> 
... 
</Rectangle> 

तो यह काम अपेक्षा के अनुरूप ... को छोड़कर जब मैं गलत पर IsHighlighted मूल्य फ्लिप, कि 0% के मूल अस्पष्टता को पुनर्स्थापित नहीं किया जाता है कि खोजने के लिए दंग रह गया था (मुझे लगता है कि सेट नीचे कम)। दोगुना इस जांच करने के लिए, मैं इस उदाहरण लिखा सत्यापित करने के लिए:

<Window x:Class="TestWpfApp.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     x:Name="Window" 
     Title="MainWindow" 
     Width="640" 
     Height="480"> 

    <Grid x:Name="LayoutRoot"> 
     <Button Name="button1" 
       Width="173" 
       Height="57" 
       Margin="10,10,0,0" 
       HorizontalAlignment="Left" 
       VerticalAlignment="Top"> 
      <Button.Style> 
       <Style TargetType="Button"> 
        <Setter Property="Content" Value="foo" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding IsMouseOver, ElementName=button1}" Value="True"> 
          <Setter Property="Content" Value="bar" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Button.Style> 
     </Button> 
    </Grid> 
</Window> 

अपेक्षित व्यवहार है कि अगर आप अगर माउस बटन के साथ, 'बार' के लिए सामग्री में परिवर्तन। माउस को दूर करने से स्टाइल द्वारा निर्दिष्ट अनुसार 'फू' में सामग्री को पुनर्स्थापित किया जाता है। स्टाइल संपत्ति प्राथमिकता मुद्दे से बचने के लिए सामग्री सेट करता है।

मेरा प्रश्न है: क्या दो-तरफा ट्रिगरिंग वास्तव में मिश्रण एक्सटेंशन में बस गायब है, या किसी भी तरह इसे सक्षम करने का कोई तरीका है?

क्या मुझे कुछ याद आ रही है? मैंने सोचा कि ट्रिगर्स का बहुत ही बिंदु था, कि उनके पास यह दो-तरफा कार्यक्षमता है। मैं ब्लेंड इंटरएक्टिविटी क्रियाओं का उपयोग जारी रखना चाहता हूं क्योंकि मुझे उन्हें उपयोगी और सहज ज्ञान मिलता है, लेकिन इस तरह की चीज मुझे हाथ से एक्सएएमएल कोडिंग करने में मजबूर करती है।

उत्तर

1

यदि मैं सही ढंग से समझता हूं तो आपको केवल अपने ट्रिगर में अन्य मूल्य के लिए विचार प्रदान करना होगा क्योंकि यह डिफ़ॉल्ट रूप से ऐसा नहीं करेगा क्योंकि आपने उस स्थिति पर नियंत्रण लिया है। कुछ इस तरह;

<i:Interaction.Triggers> 
    <ei:DataTrigger Binding="{Binding IsHighlighted}" Value="True"> 
     <ei:ChangePropertyAction PropertyName="Opacity" Value="0.5"/> 
    </ei:DataTrigger> 
    <ei:DataTrigger Binding="{Binding IsHighlighted}" Value="False"> 
     <ei:ChangePropertyAction PropertyName="Opacity" Value="0"/> 
    </ei:DataTrigger> 
</i:Interaction.Triggers> 
+0

हालांकि यह मेरा मुद्दा है - मैं वापसी मूल्य को हार्डकोड नहीं करना चाहता, मैं चाहता हूं कि ट्रिगर ट्रिगर होने से पहले आवृत्ति मान को मानना ​​पड़े। इस तरह सामान्य डब्ल्यूपीएफ/सिल्वरलाइट काम करता है। – cunningdave

+0

मुझे लगता है कि आप शायद एक 'VisualStateManager' जिसमें एक डिफ़ॉल्ट' State' निर्दिष्ट किया जाता है तो यह जानता है कि यह वापस करने के लिए वापस करने के लिए एक विशेष उदाहरण है का उपयोग कर के अर्थ में बात कर रहे हैं। लेकिन जब आप इस तरह के रूप में ट्रिगर का उपयोग कर रहे WPF या SL में यह हो रहा यकीन है कि तुम हमेशा के बाद से वहाँ एक डिफ़ॉल्ट उपलब्ध नहीं है दूसरे राज्य को वापस लाएं नियंत्रित करने के लिए होगा के रूप में वहाँ है जब ट्रिगर करने के बजाय राज्य अमेरिका के बाद से उपयोग कर रहा हूँ आप एक अपरिवर्तनीय वस्तु की स्थिति को छोड़कर मैन्युअल रूप से अपनी गुणों को बदल रहे हैं जहां आप इसे वैसे भी बदल नहीं सकते। –

+0

नहीं, यह वास्तव में मेरा मतलब नहीं है। मैंने सामान्य ट्रिगर व्यवहार को चित्रित करने के लिए ऊपर एक मामूली उदाहरण जोड़ा। – cunningdave

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