2011-04-14 6 views
9

मेरे पास एक WPF पृष्ठ है। पृष्ठ में कुछ सामग्री है, लेकिन पृष्ठ के मूल लेआउट का अंतिम बाल घटक एक उपयोगकर्ता नियंत्रण है जिसे मैंने बनाया है। यह इस तरह दिखता है:डब्ल्यूपीएफ: ट्रिगर संपत्ति संपत्ति के भीतर अन्य नियंत्रणों का संदर्भ कैसे लें?

<UserControl DataContext=UserControlViewModel> 
    <UserControl.Resources> 
    <BooleanToVisibilityConverter x:Key="visibilityConverter" /> 
    </UserControl.Resources> 
    <Grid 
     Name="grid" 
     Visibility="{Binding IsOn, Converter={StaticResource visibilityConverter}}"> 
    <!-- Border to dim everything behind my user control --> 
    <Border Background="#000000" Opacity="0.4" /> 
    <!-- The following border is red and holds the content --> 
    <Border 
     Width="{Binding ElementName=txt, Path=ActualWidth}" 
     Height="{Binding ElementName=txt, Path=ActualHeight}" 
     Margin="{Binding ElementName=txt, Path=Margin}" 
     HorizontalAlignment="{Binding ElementName=txt, Path=HorizontalAlignment}" 
     VerticalAlignment="{Binding ElementName=txt, Path=VerticalAlignment}" 
     Background="Red"> 
     <TextBlock 
      Name="txt" 
      Width="200" 
      Height="100" 
      Margin="20" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center" 
      Text="This is my super awesome message!" /> 
    </Border> 
    </Grid> 
</UserControl> 

डिफ़ॉल्ट रूप से, UserControlViewModel वस्तु की IsOn संपत्ति, false पर सेट है अर्थात उपयोगकर्ता नियंत्रण दिखाई नहीं देता है। मैंने कुछ तर्क लागू किए हैं जो इस संपत्ति को true में बदलते हैं और फिर उपयोगकर्ता नियंत्रण सभी अन्य घटकों के सामने प्रदर्शित होता है जो मंद हो जाते हैं। यह अच्छी तरह से काम करता है।

अब, मैं एक फीका प्रभाव एनीमेशन बनाना चाहता हूं जो उपयोगकर्ता नियंत्रण के बाद घटकों को मंद कर देगा जो दिखाई देने पर दिखाई देगा। इसके बाद, मैं अपनी लाल सीमा बनाना चाहता हूं जो सामग्री को बाईं ओर से फीका करने के लिए रखती है, इसलिए + फीड चलाना।

चलिए पहले फीका प्रभाव से शुरू करते हैं। मैं Border को यह शैली ने लिखा है कि पृष्ठभूमि घटकों के मद्धिम क्या करना चाहिए है:

<UserControl DataContext=UserControlViewModel> 
    <UserControl.Resources> 
    <BooleanToVisibilityConverter x:Key="visibilityConverter" /> 
    </UserControl.Resources> 
    <Grid 
     Name="grid" 
     Visibility="{Binding IsOn, Converter={StaticResource visibilityConverter}}"> 
    <!-- Border to dim everything behind my user control --> 
    <Border Background="#000000" Opacity="0.4"> 
     <!-- The following style is new code --> 
     <Border.Style> 
     <Style TargetType="Border"> 
      <Style.Triggers> 
      <Trigger Property="{Binding ElementName=grid, Visibility}" Value="Visible"> 
       <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
        <DoubleAnimation 
         Storyboard.TargetProperty="Opacity" 
         From="0.0" 
         To="0.4" 
         Duration="0:0:1" /> 
        </Storyboard> 
       </BeginStoryboard> 
       </Trigger.EnterActions> 
      </Trigger> 
      </Style.Triggers> 
     </Style> 
     </Border.Style> 
    </Border> 
    ... 

लेकिन वहाँ समस्या है: मैं, ट्रिगर Property पर बाध्यकारी सेट नहीं कर सकता क्योंकि यह एक निर्भरता संपत्ति नहीं है। grid को Visibility संपत्ति Visible पर सेट करने के बाद मुझे अपने ट्रिगर को आग लगाने के लिए एक तरीका चाहिए। कृपया मदद करें और धन्यवाद!

दूसरी समस्या यह है कि मुझे नहीं पता कि लाल सीमा को आगे बढ़ाना कैसा है, इसलिए मुझे कुछ पैमाने परिवर्तनों के आसपास भी मदद की ज़रूरत है, मुझे लगता है ... एक बार फिर धन्यवाद!

उत्तर

15

कोशिश निम्न पंक्ति की जगह:

मूल:

<Trigger Property="{Binding ElementName=grid, Visibility}" Value="Visible"> 

रिप्लेसमेंट:

<DataTrigger Binding={Binding Visibility, ElementName=grid} Value="Visibile"> 
+0

यह काम करता है, महान! – Boris

+0

यह केवल पहली बार काम करता है! क्यूं कर!? – Boris

+0

@myermian: मुझे पूरा यकीन नहीं है कि आपका क्या मतलब है। क्या आप इसे कुछ और वाक्यों में समझा सकते हैं? धन्यवाद। – Boris