2009-03-12 30 views
0

LayoutTransform sınıfındaki bir boole'ye bağlı bir DataTrigger temel alınarak bir LayoutTransform'in ScaleY özelliğini canlandırmaya çalışıyorum. Animasyon, ilk önce DataTrigger (uygulama ilk başladığı zaman) tarafından yanlış olarak görüldüğünde ve onay kutusunun işaretli olayında bunu doğru olarak değiştirdiğimde, ancak aynı onay kutusunun işaretlenmemiş olayında yanlış olarak ayarlanmadığında gerçekleşir.WPF - Kafa karıştırıcı DataTrigger/DoubleAnimation davranış

Yapmakta olduğum şeyin basitleştirilmiş bir sürümü aşağıda listelenmiştir.

ViewModel sınıfı, Selected adlı tek bir boolean DependencyProperty içeren çok basittir.

 public class VM : DependencyObject 
{ 
    public bool Selected 
    { 
     get { return (bool)GetValue(SelectedProperty); } 
     set { SetValue(SelectedProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for Selected. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty SelectedProperty = 
     DependencyProperty.Register("Selected", typeof(bool), typeof(VM), new UIPropertyMetadata(false)); 
} 

Window.xaml bir düğme ve bir onay kutusu içerir. Onay kutusu işaretlendiğinde, ViewModel'in 'Selected' özelliğini true değerine ayarlıyorum ve işaretlenmediğinde yanlış. İşte, hem xaml hem de onun arkasındaki kod için kod.

 public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
    } 

    private void CheckBox_Checked(object sender, RoutedEventArgs e) 
    { 

     VM vm = this.FindResource("VM") as VM; 
     vm.Selected = true; 
    } 

    private void CheckBox_Unchecked(object sender, RoutedEventArgs e) 
    { 
     VM vm = this.FindResource("VM") as VM; 
     vm.Selected = false; 
    } 
} 

DataTrigger özelliği false olduğunda, DoubleAnimation'i Opacity özelliği üzerinde çalışan basit bir Setter olarak değiştirdiğimde, doğru sonuçları gördüğümü biliyorum. Yani DoubleAnimation'i nasıl kullandığımla ilgili bir sorun gibi görünüyor.

Herhangi bir yardım istenir.

cevap

3

Bu ODD davranıştır ama ben böyle DataTrigger en ExitActions içine 'Yanlış' davasını planı ayrı karar - gerektiği gibi çalışıyorsa

<DataTrigger Binding="{Binding Selected}" Value="True"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Duration="0:0:1" 
              To="1" 
              Storyboard.TargetProperty="(RenderTransform).(ScaleTransform.ScaleY)"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 
       <DataTrigger.ExitActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Duration="0:0:1" 
              To="0" 
              Storyboard.TargetProperty="(RenderTransform).(ScaleTransform.ScaleY)"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.ExitActions> 
      </DataTrigger> 

. İki durum arasında ne fark olduğunu bilmiyorum ama en azından bir cevap.

+1

Bu gerçekten tuhaftır. Bunun neden böyle olduğunu bilen var mı? – lbergnehr