2012-06-30 20 views
6

Tôi đang sử dụng hình ảnh được lưu trữ trên máy chủ trong ứng dụng C#/XAML WinRT của tôi. Khi hình ảnh đó được tải xuống, tôi muốn nó mờ đi. Tôi nhận thấy các FadeInThemeAnimation đó là những gì tôi đã hy vọng để sử dụng. Nhưng, tôi muốn sử dụng nó như một EntranceThemeTransition. Có cách nào để làm việc này không? nếu vậy, làm thế nào?Sử dụng FadeInThemeAnimation làm Chuyển đổi trong WinRT

Trả lời

9

Tôi đã gặp sự cố tương tự nhưng đã tìm thấy giải pháp, tôi nghĩ rằng vẫn có thể hữu ích khi chia sẻ nó.

Dường như FadeInThemeAnimation là loại hoạt ảnh đặc biệt không hoạt động trên Độ mờ và Khả năng hiển thị như bạn nghĩ, nhưng trên RenderTransform của một mục. Tôi chỉ quản lý để làm cho nó hoạt động khi fading ra mục đầu tiên với FadeOutThemeAnimation.

Nhưng đây là giải pháp thay thế. Trong XAML của bạn, thêm một Storyboard để Tài nguyên container của hình ảnh của bạn, như thế này:

<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 ...}"/> 
... 

Sau đó, thêm một handler để ImageOpened sự kiện của hình ảnh:

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

Và trong code-behind:

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

Hy vọng rằng sẽ giúp :)

+0

Cá nhân tôi không thể sử dụng điều này bởi vì nó có code-behind. Nó xuất hiện có STILL không tái sử dụng, cách đơn giản để làm điều này. Tôi có nghĩa là, những người đã từng không muốn phai một hình ảnh trong ngày tải (thậm chí từ đĩa). Không thể tin được. –

+1

Có, bạn có thể tạo một lớp mới kế thừa từ Hình ảnh và đóng gói hành vi này. Bạn cũng có thể tạo hành vi hình ảnh hoặc thuộc tính phụ thuộc đính kèm. Có rất nhiều cách để làm điều này mà không cần code-behind. –

2

Một cách tiếp cận khác là tạo một attac hành vi HED rằng "Listening" tới boolean ràng buộc để bắn các hình ảnh động chủ đề:

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(); 
     } 
    } 
} 

Để đính kèm hành vi để một XAML DependencyObject (Grid trong ví dụ này) sử dụng như sau:

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

Cảm ơn. Tôi thích cách tiếp cận này với các thuộc tính được gắn vào. – Sven

Các vấn đề liên quan