动画风格被覆盖了

时间:2012-03-19 17:32:19

标签: c# wpf silverlight xaml

我正在制作所有TreeView动画.....

使用app.xaml:

<Style TargetType="{x:Type TreeView}">
    <Style.Resources>
        <Style TargetType="{x:Type TreeViewItem}">
            <Style.Triggers>
                <EventTrigger RoutedEvent="TreeViewItem.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                             From="0" To="1" BeginTime="00:00:00" Duration="00:00:01" FillBehavior="Stop"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
      </Style.Resources>
</Style>

它适用于每个TreeView,我可以看到TreeViewItem淡入。

但是如果TreeView的定义如下,并且风格为:

   <TreeView>
        <TreeView.Resources>
            <Style TargetType="{x:Type TreeViewItem}">
                <Style.Triggers>
                    <Trigger Property="IsEnabled" Value="True">
                          //Do some work
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TreeView.Resources>
        <TreeViewItem Header="Item1">
            <TreeViewItem Header="Item2">
                <TreeViewItem Header="Item3"/>
                <TreeViewItem Header="Item4"/>
            </TreeViewItem>
            <TreeViewItem Header="Item5"/>
        </TreeViewItem>            
        <TreeViewItem Header="Item6"/>
    </TreeView>

动画将不再有效。 这有什么解决方案或解决方法吗?我真的不想把整个动画代码放在TreeView中......

1 个答案:

答案 0 :(得分:0)

1)使用现有样式

创建一个名为style的基础
<Style x:Key="baseTreeViewStyle" 
       TargetType="{x:Type TreeViewItem}"> existing style here </Style>

2)根据您的基本样式创建一个没有名称的样式 - 这将是您隐式的全局样式

<Style TargetType="{x:Type TreeViewItem}" 
       BasedOn={StaticResource baseTreeViewStyle} />

3)在树视图中扩展基本样式

<Style TargetType="{x:Type TreeViewItem}" 
       BasedOn="{StaticResource baseTreeViewStyle}">
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="True">
              //Do some work
        </Trigger>
    </Style.Triggers>
</Style>

现在您获得了一个隐式的全局样式,但如果您需要特定的附加行为,则覆盖基本样式。

为了更加彻底,您的基本样式应该基于默认的TreeViewItem样式

<Style x:Key="baseTreeViewStyle" 
       TargetType="{x:Type TreeViewItem}" 
       BasedOn="{StaticResource {x:Type TreeViewItem}}"> 
           existing style here 
</Style>