2009-09-22 2 views
1

Я пытаюсь создать простой стиль, который выделяет сфокусированный элемент пользовательского интерфейса (текстовое поле, комбо и т. Д.), В то время как он имеет фокус, и уходит, когда теряется фокус.WPF Styles, BasedOn, & Storyboards

Я придумал это: `

<Style TargetType="{x:Type FrameworkElement}" x:Key="OnFocus"> 
     <Setter Property="Effect"> 
      <Setter.Value> 
       <DropShadowEffect Color="Red" 
         BlurRadius="0" 
         ShadowDepth='0' /> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <EventTrigger RoutedEvent="UIElement.GotFocus"> 
        <BeginStoryboard Name="highlight"> 
         <Storyboard> 
          <DoubleAnimation 
       Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.BlurRadius)" 
          To="8" 
          Duration="0:0:0.5" /> 
         </Storyboard> 
        </BeginStoryboard> 

       </EventTrigger> 
      <EventTrigger RoutedEvent="UIElement.LostFocus"> 
       <RemoveStoryboard BeginStoryboardName="highlight"></RemoveStoryboard> 
      </EventTrigger> 

     </Style.Triggers> 


    </Style>` 

Но если я пытаюсь создавать простые стили BasedOn, он не может найти BeginStoryboardName =«изюминку», так что каждый из элементов заканчивается, имеющим весь стиль. Триггеры.

Есть ли лучший способ сделать это?

+0

О, да, поскольку у меня около 400 элементов freakin, я ищу решение стиля/xaml. – 2009-09-22 20:05:18

ответ

1

Поскольку стили не наследуются, как наследование OO, вложенный стиль не может найти раскадровку в его области.

Самый простой способ сделать выделение - добавить вторую раскадровку, которая отменяет выделение.

<Storyboard x:Key="startHighlight" > 
      <DoubleAnimation 
       Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.BlurRadius)" 
       To="8" 
       Duration="0:0:0.5" /> 
     </Storyboard> 
     <Storyboard x:Key="reverseHighlight" > 
      <DoubleAnimation 
       Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.BlurRadius)" 
       To="0" 
       Duration="0:0:0.2" /> 
     </Storyboard> 

     <Style TargetType="{x:Type FrameworkElement}"> 
      <Setter Property="Effect"> 
       <Setter.Value> 
        <DropShadowEffect Color="Red" 
             BlurRadius="0" 
             ShadowDepth="0" /> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
       <EventTrigger RoutedEvent="UIElement.GotFocus"> 
        <BeginStoryboard Storyboard="{StaticResource startHighlight}"> 
        </BeginStoryboard> 
       </EventTrigger> 
       <EventTrigger RoutedEvent="UIElement.LostFocus"> 
        <BeginStoryboard Storyboard="{StaticResource reverseHighlight}"> 
        </BeginStoryboard> 
       </EventTrigger> 
      </Style.Triggers> 
     </Style> 
     <Style BasedOn="{StaticResource {x:Type FrameworkElement}}" TargetType="{x:Type TextBox}"> 

     </Style> 
Смежные вопросы