WinRT

2012-06-30 19 views
6

में एक संक्रमण के रूप में एक FadeInThemeAnimimation का उपयोग कर मैं अपने सी #/XAML WinRT ऐप में किसी सर्वर पर होस्ट की गई छवि का उपयोग कर रहा हूं। जब वह छवि डाउनलोड हो जाती है, तो मैं इसे फीका करना चाहता हूं। मैंने FadeInThemeAnimation देखा जो मैं उपयोग करने की उम्मीद कर रहा था। लेकिन, मैं इसे EntranceThemeTransition की तरह उपयोग करना चाहता हूं। क्या इसे करने का कोई तरीका है? यदि हां, तो कैसे?WinRT

उत्तर

9

मैं एक ही मुद्दे में भाग गया हूं लेकिन एक समाधान मिला, मैंने सोचा कि यह अभी भी इसे साझा करने के लिए उपयोगी हो सकता है।

स्पष्ट रूप से FadeInThemeAnimation एक विशेष प्रकार की एनीमेशन है जो ओपेसिटी और दृश्यता पर काम नहीं करती है जैसा कि आप सोच सकते हैं, लेकिन किसी आइटम के रेंडरट्रांसफॉर्म पर। FadeOutThemeAnimation के साथ आइटम को पहले बाहर निकालते समय मैंने इसे केवल काम करने में कामयाब रहा है।

लेकिन यहां एक कामकाज है। अपने XAML में आपकी छवि का कंटेनर की संसाधन के लिए एक स्टोरीबोर्ड जोड़ने के लिए, इस तरह:

<Image x:Name="yourImage" Source="{Binding ...}" ImageOpened="OnImageOpened"/> 

और में कोड-पीछे:

private void OnImageOpened(object sender, RoutedEventArgs e) 
{ 
    ImageFadeInStoryboard.Begin(); 
} 

<Grid> 
    <Grid.Resources> 
     <Storyboard x:Name="ImageFadeInStoryboard"> 
      <DoubleAnimation From="0" To="1" Storyboard.TargetName="yourImage" Storyboard.TargetProperty="Opacity" Duration="0:0:0.6" /> 
     </Storyboard> 
    </Grid.Resources> 
    <Image x:Name="yourImage" Source="{Binding ...}"/> 
... 

तब छवि के ImageOpened घटना के लिए एक हैंडलर जोड़ने

आशा है कि मदद करता है :)

+0

व्यक्तिगत रूप से मैं इसका उपयोग नहीं कर सकता क्योंकि इसमें कोड-पीछे है। ऐसा लगता है कि ऐसा करने के लिए अभी तक कोई पुन: प्रयोज्य, सरल तरीका नहीं है। मेरा मतलब है, जो कभी भी लोड पर एक छवि को फीका नहीं करना चाहता था (डिस्क से भी)। अविश्वसनीय। –

+1

वहां, आप छवि से विरासत में प्राप्त एक नई कक्षा बना सकते हैं और इस व्यवहार को समाहित कर सकते हैं। आप एक छवि व्यवहार या संलग्न निर्भरता संपत्ति भी बना सकते हैं। कोड-बैक के बिना ऐसा करने के कई तरीके हैं। –

2

एक और दृष्टिकोण एक अटैक बनाने के लिए है hed व्यवहार है कि एक बूलियन करने के लिए "सुनता है" विषय एनीमेशन आग के लिए बाध्य:

static class VisibilityAnimationBehavior 
{ 
    public static readonly DependencyProperty IsVisibleProperty = DependencyProperty.RegisterAttached("IsVisible", typeof(bool), typeof(VisibilityAnimationBehavior), new PropertyMetadata(true, IsVisibleChanged)); 
    public static bool GetIsVisible(DependencyObject Target) { return (bool)Target.GetValue(IsVisibleProperty); } 
    public static void SetIsVisible(DependencyObject Target, bool Value) { Target.SetValue(IsVisibleProperty, Value); } 

    static void IsVisibleChanged(DependencyObject Source, DependencyPropertyChangedEventArgs Arguments) 
    { 
     bool OldValue = (bool)Arguments.OldValue; 
     bool NewValue = (bool)Arguments.NewValue; 

     DependencyObject ParentObject = Source as DependencyObject; 
     if(ParentObject == null) 
      return; 

     if(NewValue == true && OldValue != true) 
     { 
      Storyboard TransitionStoryboard = new Storyboard(); 
      Storyboard.SetTarget(TransitionStoryboard, ParentObject); 

      TransitionStoryboard.Children.Add(new FadeInThemeAnimation()); 

      TransitionStoryboard.Begin(); 
     } 
     else if(NewValue == false && OldValue != false) 
     { 
      Storyboard TransitionStoryboard = new Storyboard(); 
      Storyboard.SetTarget(TransitionStoryboard, ParentObject); 

      TransitionStoryboard.Children.Add(new FadeOutThemeAnimation()); 

      TransitionStoryboard.Begin(); 
     } 
    } 
} 

आदेश एक XAML DependencyObject (इस उदाहरण में एक ग्रिड) के व्यवहार को संलग्न करने में निम्नलिखित का उपयोग करें:

<Grid local:VisibilityAnimationBehavior.IsVisible="{Binding Path=TheBooleanBinding}"> 
+0

धन्यवाद। मुझे अनुलग्नक गुणों के साथ इस दृष्टिकोण को पसंद है। – Sven