2012-03-19 2 views
0

я делал анимацию для всей моей 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 ...

+0

Вы подменяют стиль анимации с той, которая определяет триггер. Способ решения стилей подобен любому другому ресурсу WPF: он будет приближаться к логическому дереву, пока не найдет его и не остановится. В вашем случае он найдет стиль с помощью триггера и больше не продолжит работу. Решение Фила является правильным, наследуйте свой стиль триггера из стиля анимации, используя BasedOn. –

+0

@Claudiu oh, поэтому нет решения, которое я могу сказать, применив стиль анимации к любому дереву, независимо от того, что они определяют для триггера? Потому что я пытаюсь найти прочь, чтобы я мог применять их во всем мире, не изменяя код в TreeView. –

+0

Я боюсь, что нет. Если вы не настроите стиль вручную, он будет установлен на первый, который можно найти в ресурсе treeView (включая унаследованные ресурсы). Вы все равно применяете стиль Trigger (помещая его в словарь ресурсов treeView), поэтому просто продолжайте и получите свой стиль триггера из стиля анимации. –

ответ

0

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> 
+0

Но в этом решении это означает, что я должен идти к каждому «TreeView», который имеет триггер в своем стиле и расширяет их стиль в стиле анимации? Нет решения, что я могу применить анимацию независимо от того, что они определяют в стиле TreeView? Или заставить глобально сказать, что стиль 'TreeViewItem' будет' BaseOn', что я определяю в App.xaml? –

+0

Альтернативой является определение нескольких «базовых» древовидных стилей - столько, сколько вам нужно, - затем укажите стиль = {} на каждом древовидном представлении. Или в каждой области создайте стиль без ключа, основанный на базовом стиле выбора, который затем повлияет на все древовидные структуры в этой области. – Phil

Смежные вопросы