Стиль анимации был переопределен - PullRequest
0 голосов
/ 19 марта 2012

Я делал анимацию для всего моего 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 голосов
/ 19 марта 2012

1) создайте базовый стиль с вашим существующим стилем

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...