2015-11-04 52 views
0

在我的應用程序中,我有很多非常大的DataGridTemplateColumn-定義。對於每一列我都定義了一種風格。例如兩列的樣式看起來像:風格的故事板

<DataGridTemplateColumn.CellStyle> 
    <Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource BaseDataGridCellStyle}"> 
     <Setter Property="IsEditing" 
       Value="{Binding CurrentEditTarget, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, 
           Converter={converters:EditConverter}, ConverterParameter={x:Static component:EditTarget.VariantPath}}" /> 
     <Setter Property="BorderBrush" Value="Blue" />  
     <Style.Triggers> 
      <DataTrigger Binding="{Binding CurrentEditTarget}" Value="{x:Static component:EditTarget.VariantPath}"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <ThicknessAnimation Storyboard.TargetProperty="(Border.BorderThickness)" FillBehavior="HoldEnd" From="4" To="0" Duration="0:0:0.5" > 
           <ThicknessAnimation.EasingFunction> 
            <PowerEase EasingMode="EaseOut"/> 
           </ThicknessAnimation.EasingFunction> 
          </ThicknessAnimation> 
          <ThicknessAnimation Storyboard.TargetProperty="(Border.Margin)" FillBehavior="HoldEnd" From="-20,0,20,0" To="0" Duration="0:0:0.5" > 
           <ThicknessAnimation.EasingFunction> 
            <PowerEase EasingMode="EaseOut"/> 
           </ThicknessAnimation.EasingFunction> 
          </ThicknessAnimation> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 
       <Setter Property="attachedProperties:DataGridExtensions.FocusOnEditingColumn" Value="VariantPath"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGridTemplateColumn.CellStyle> 

-

<DataGridTemplateColumn.CellStyle> 
    <Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource BaseDataGridCellStyle}"> 
     <Setter Property="IsEditing" 
       Value="{Binding CurrentEditTarget, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, 
           Converter={converters:EditConverter}, ConverterParameter={x:Static component:EditTarget.OriginalPath}}" /> 
     <Setter Property="BorderBrush" Value="Blue" />  
     <Style.Triggers> 
      <DataTrigger Binding="{Binding CurrentEditTarget}" Value="{x:Static component:EditTarget.OriginalPath}"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <ThicknessAnimation Storyboard.TargetProperty="(Border.BorderThickness)" FillBehavior="HoldEnd" From="4" To="0" Duration="0:0:0.5" > 
           <ThicknessAnimation.EasingFunction> 
            <PowerEase EasingMode="EaseOut"/> 
           </ThicknessAnimation.EasingFunction> 
          </ThicknessAnimation> 
          <ThicknessAnimation Storyboard.TargetProperty="(Border.Margin)" FillBehavior="HoldEnd" From="-20,0,20,0" To="0" Duration="0:0:0.5" > 
           <ThicknessAnimation.EasingFunction> 
            <PowerEase EasingMode="EaseOut"/> 
           </ThicknessAnimation.EasingFunction> 
          </ThicknessAnimation> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 
       <Setter Property="attachedProperties:DataGridExtensions.FocusOnEditingColumn" Value="OriginalPath"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGridTemplateColumn.CellStyle> 

我想知道如果有一種方法來提取Storyboard成風格或資源或別的東西。因爲這是風格的一部分總是對每個DataGridTemplateColumn

+0

聽起來[樣式繼承(http://www.wpftutorial.net/StyleInheritance。 HTML)工作。創建基本樣式,在其中添加帶有動畫的觸發器,然後所有新單元格都是「BasedOn」它。 – Sinatr

+0

問題是,datatrigger的值總是不同的 – Tomtom

回答

1

這個怎麼樣相同的:

<Application.Resources> 
    <Storyboard x:Key="SB_Height" x:Shared="False"> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" 
       Storyboard.TargetName="{DynamicResource AnimationTarget}"> 
      <EasingDoubleKeyFrame KeyTime="0:0:1" Value="90"> 
       <EasingDoubleKeyFrame.EasingFunction> 
        <CircleEase EasingMode="EaseOut" /> 
       </EasingDoubleKeyFrame.EasingFunction> 
      </EasingDoubleKeyFrame> 
     </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 
</Application.Resources> 


<Button Name="mybutton" Content="Test" Height="20"> 
    <Button.Triggers> 
     <EventTrigger RoutedEvent="Button.Click"> 
      <BeginStoryboard Storyboard="{StaticResource SB_Height}"/> 
     </EventTrigger> 
    </Button.Triggers> 
</Button> 
+0

正是我在找的東西。非常感謝 – Tomtom

+0

請[引用作者](http://stackoverflow.com/a/7028200/1997232)每當從另一個答案複製/粘貼代碼。 – Sinatr