2010-06-22 64 views
1

我想讓WPF UI元素在其Visibility屬性過渡到「可見」時垂直展開。我不想在動畫中對高度進行硬編碼,因爲我想將此動畫應用到任何UI元素作爲樣式。所以,我試圖使用ScaleY,但沒有任何運氣。這裏是樣式的XAML和列表框:如何在元素變爲可見時動畫ScaleY

<Style x:Key="VerticalGrow" TargetType="ListBox"> 
    <Style.Triggers> 
     <Trigger Property="Visibility" Value="Visible"> 
      <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetProperty="TransformGroup.ScaleTransform.ScaleY" BeginTime="0:0:0.5" From="0" To="1" Duration="0:0:0.5" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.EnterActions> 
     </Trigger> 
    </Style.Triggers> 
</Style> 


<ListBox Grid.Row="2" MaxHeight="60" MinHeight="60" Visibility="{Binding MyViewModel.ListBoxVisibility}" IsSynchronizedWithCurrentItem="False" ItemsSource="{Binding MyViewModel.ListBoxItems}" Style="{DynamicResource VerticalGrow}" IsTabStop="True"> 
</ListBox> 

我得到一個運行時異常抱怨:

「無法在屬性‘風格’值轉換爲類型的「對象System.Windows.Style '。無法解析屬性路徑'TransformGroup.RenderTransform.ScaleTransform.ScaleY'中的所有屬性引用。驗證適用對象是否支持屬性。標記文件'MyApp; component/mainwindow'中的對象'System.Windows.Controls.ListBox'出錯.xaml'Line 69 Position 399.「}

回答

2

ListBox沒有屬性TransformGroup。我想你想將RenderTransform或LayoutTransform設置爲ScaleTransform,然後爲其設置動畫效果。

<Style x:Key="VerticalGrow" TargetType="ListBox"> 
    <Setter Property="RenderTransform"> 
     <Setter.Value> 
      <ScaleTransform/> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="Visibility" Value="Visible"> 
      <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation 
          Storyboard.TargetProperty="RenderTransform.ScaleY" 
          BeginTime="0:0:0.5" From="0" To="1" Duration="0:0:0.5" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.EnterActions> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

謝謝。儘管現在我知道我的動畫並不完全符合我的想法,但這與您的答案無關。 – Emmanuel 2010-06-22 12:37:38

相關問題