2011-04-07 20 views
10

Herkes, WPF DataGrid satır ayrıntılarını açılıp kapatıldığında canlandırmama yardımcı olabilir (ör. Satır seçiliyken, slayt seçiliyken slaytlar açık olarak açılır ve satır seçilmediğinde kapatılır). Basit bir kavram kanıtına ihtiyacım var.Animasyon WPF DataGrid Satır Ayrıntıları

+0

Cevabımı bu arada güncelledim, şimdi bir kapanış animasyonu var. –

cevap

12

Ayrıntılı Yardımlarınız için şimdiden teşekkür ederiz :) ama çalışır:

<DataGrid.RowStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
     <Setter Property="DetailsVisibility" Value="Collapsed"/> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" Value="True"> 
       <Trigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="DetailsVisibility"> 
           <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/> 
          </ObjectAnimationUsingKeyFrames> 
         </Storyboard> 
        </BeginStoryboard> 
       </Trigger.EnterActions> 
       <Trigger.ExitActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="DetailsVisibility"> 
           <DiscreteObjectKeyFrame KeyTime="0:0:0.4" Value="{x:Static Visibility.Collapsed}"/> 
          </ObjectAnimationUsingKeyFrames> 
         </Storyboard> 
        </BeginStoryboard> 
       </Trigger.ExitActions> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 
<DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <Grid> 
      <Grid.LayoutTransform> 
       <ScaleTransform ScaleY="0"/> 
      </Grid.LayoutTransform> 
      <Grid.Style> 
       <Style TargetType="Grid"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}}" 
            Value="True"> 
          <DataTrigger.EnterActions> 
           <BeginStoryboard> 
            <Storyboard> 
             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="LayoutTransform.ScaleY"> 
              <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="1"> 
               <EasingDoubleKeyFrame.EasingFunction> 
                <CubicEase EasingMode="EaseInOut" /> 
               </EasingDoubleKeyFrame.EasingFunction> 
              </EasingDoubleKeyFrame> 
             </DoubleAnimationUsingKeyFrames> 
            </Storyboard> 
           </BeginStoryboard> 
          </DataTrigger.EnterActions> 
          <DataTrigger.ExitActions> 
           <BeginStoryboard> 
            <Storyboard> 
             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="LayoutTransform.ScaleY"> 
              <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="0"> 
               <EasingDoubleKeyFrame.EasingFunction> 
                <CubicEase EasingMode="EaseInOut" /> 
               </EasingDoubleKeyFrame.EasingFunction> 
              </EasingDoubleKeyFrame> 
             </DoubleAnimationUsingKeyFrames> 
            </Storyboard> 
           </BeginStoryboard> 
          </DataTrigger.ExitActions> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Grid.Style> 
      <Grid.Children> 
       <TextBlock Text="Lorem ipsum dolor sit"/> 
      </Grid.Children> 
     </Grid> 
    </DataTemplate> 
</DataGrid.RowDetailsTemplate> 

Düzenleme: manuel dönüş animasyon artık çok çalışıyor RowStyle içinde DetailsVisibility bakım alarak.

DataGrid'in yüksekliğinin ayrıntıları daraltıldıktan sonra daralmayacağına dikkat edin, bu biraz sorunlu olabilir. Bu, VirtualizingStackPanel'in bilinen bir sorundur, eğer bunu karşılayabiliyorsanız, DataGrid.ItemsPanel'u normal StackPanel'e dönüştürebilirsiniz (Çok fazla veriye sahipseniz, bu, her satır hemen oluşturulsa bile uygulamayı büyük ölçüde yavaşlatacaktır. gözle görülür). Ayrıca, Ctrl + A tuşlarına basmak da çok eğlencelidir.