2013-04-04 22 views
6

का उपयोग कर एक डब्ल्यूपीएफ लेबल (या अन्य तत्व) फ्लैश बनाना मेरे पास एक लेबल है जो मैं केवल अपने व्यूमोडेल गुणों में से एक के आधार पर दृश्यमान करता हूं।एनीमेशन

<Label HorizontalAlignment="Center" VerticalAlignment="Center" 
     HorizontalContentAlignment="Center" 
     VerticalContentAlignment="Center" 
     FontSize="24" Width="200" Height="200" > 
    <Label.Content > 
     Option in the money! 
    </Label.Content> 
    <Label.Style> 
     <Style TargetType="{x:Type Label}"> 
      <Setter Property="Visibility" Value="Hidden" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding OptionInMoney}" Value="True"> 
        <Setter Property="Visibility" 
       Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Label.Style> 

</Label> 

मुझे यकीन है कि यह सबसे अच्छा तरीका है, लेकिन किसी भी मामले में, मैं भी लेबल चमकती करना चाहते हैं नहीं कर रहा हूँ: यहाँ XAML है। जाहिर है, मैं केवल तभी दिखाना चाहता हूं जब यह दिखाई दे। क्या कोई मुझे कुछ उदाहरण कोड पर इंगित कर सकता है, या ऐसा करने के लिए एक त्वरित उदाहरण लिख सकता है? मुझे लगता है कि मुझे किसी प्रकार का ट्रिगर और एनीमेशन चाहिए। संभवतः मुझे एक ट्रिगर की भी आवश्यकता है जब लेबल अब दिखाई नहीं दे रहा है ताकि मैं एनीमेशन को रोकूं?

धन्यवाद, डेव पीएस क्या इन सभी डब्ल्यूपीएफ चाल के लिए कोई अच्छी किताब या साइट है? उन लोगों के लिए "एमएफसी उत्तर पुस्तिका" की तरह कुछ जो उस पुस्तक को याद करते हैं।

+0

हा - विकल्प ट्रेडिंग सिस्टम? :) क्या आप स्टोरीबोर्ड एनिमेशन से परिचित हैं? तत्व पर अस्पष्टता संपत्ति को एनिमेट करके आप जो व्यवहार कर रहे हैं उसे प्राप्त कर सकते हैं - अगर मुझे मौका मिलता है तो मैं एक उदाहरण डालूंगा। – JerKimball

उत्तर

22

आप Style.Resources करने के लिए एक Storyboard एनीमेशन जोड़ सकते हैं और DataTrigger की EnterActions अनुभाग में शुरू कर सकता है।

एक साधारण DoubleAnimationOpacity पर इस तरह ठीक

कुछ काम करना चाहिए:

<Label.Style> 
    <Style TargetType="{x:Type Label}"> 
     <Style.Resources> 
      <Storyboard x:Key="flashAnimation" > 
       <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" AutoReverse="True" Duration="0:0:0.5" RepeatBehavior="Forever" /> 
      </Storyboard> 
     </Style.Resources> 

     <Setter Property="Visibility" Value="Hidden" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding OptionInMoney}" Value="True"> 
       <Setter Property="Visibility" Value="Visible" /> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard Name="flash" Storyboard="{StaticResource flashAnimation}" /> 
       </DataTrigger.EnterActions> 
       <DataTrigger.ExitActions> 
        <StopStoryboard BeginStoryboardName="flash"/> 
       </DataTrigger.ExitActions> 
      </DataTrigger> 

     </Style.Triggers> 
    </Style> 
</Label.Style> 
+0

शानदार! क्या मुझे एनीमेशन को रोकने की व्यवस्था करने की आवश्यकता है जब संपत्ति (OptionInMoney) वापस झूठी हो जाती है, या यह स्वचालित रूप से हो जाएगी। अर्थात। क्या मुझे DataTrigger.ExitActions की आवश्यकता है और यदि हां, तो मैं इसे कैसे सेट अप करूं? मैं इसका जिक्र करता हूं, क्योंकि मैंने एनीमेशन के अन्य पदों में हमेशा कुछ जारी रखने के बारे में कुछ चर्चा देखी है, भले ही यह दिखाई न दे। एक बार फिर धन्यवाद। – Dave

+0

हां, 'ExitActions' में एनीमेशन को रोकने का शायद एक अच्छा विचार है, मैंने 'StopStoryboard' –

+0

परफेक्ट के साथ उत्तर अपडेट किया है। एक बार फिर धन्यवाद। – Dave

0

this post आज़माएं। इसे 'ब्लिंकिंग टेक्स्टब्लॉक' कहा जाता है लेकिन आप आसानी से लेबल के लिए TextBox स्वैप कर सकते हैं।

+0

लिंक-केवल-उत्तरों से बचें। वे लिंक-रोट के लिए अतिसंवेदनशील हैं। – ANeves

2

स्टोरीबोर्ड निश्चित रूप से WPF तरीका है, लेकिन यह भी एक सरल कोड के द्वारा प्राप्त किया जा सकता है। यहाँ यह, चला जाता है एक लेबल पृष्ठभूमि झपकी बनाने के लिए:

lblTimer कुछ पाठ के साथ अपने फार्म पर एक Lebel है, कहते हैं,

इस दृश्यता के रूप में, किसी भी संपत्ति के लिए लागू किया जा सकता है "मैं निमिष हूँ।"

// Create a timer. 
private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    DispatcherTimer timer = new DispatcherTimer(); 
    timer.Tick += timer_Tick; 
    timer.Interval = new TimeSpan(0, 0, 0, 0, 500); 
    timer.Start(); 
} 

// The timer's Tick event. 
private bool BlinkOn = false; 
private void timer_Tick(object sender, EventArgs e) 
{ 
    if (BlinkOn) 
    { 
     lblTimer.Foreground = Brushes.Black; 
     lblTimer.Background = Brushes.White; 
    } 
    else 
    { 
     lblTimer.Foreground = Brushes.White; 
     lblTimer.Background = Brushes.Black; 
    } 
    BlinkOn = !BlinkOn; 
} 
+0

अच्छी तरह से काम किया, मैं एक दृश्यता के साथ झिलमिलाहट के लिए अस्पष्टता का उपयोग करता हूं। फ्लिकर तत्व (ओं) +1 को खारिज करने के लिए opts का उपयोग करते समय कॉल किया गया – BENN1TH