2015-06-17 10 views
1

Возможно ли установить значение Style (Button) изнутри DataTrigger на том же контроле?Выберите стиль в зависимости от свойства

Я хотел бы определить мои Default-, MouseOver- и Selected-Styles в качестве ресурсов для повторного использования их позже. Однако обработка событий MouseOver (и других), как правило, выполняется путем установки измененных свойств по отдельности в DataTrigger вместо назначения нового элемента управления Style (что имеет смысл, поскольку datatrigger будет удален, назначив другой стиль).

ответ

1

Вы можете сделать что-то подобное с DataTamplates:

<Window x:Class="StackSimpleSample.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Grid.Resources> 
     <Style x:Key="RedStyle" TargetType="TextBlock"> 
      <Setter Property="Foreground" Value="Red"/> 
     </Style> 

     <Style x:Key="GreenStyle" TargetType="TextBlock"> 
      <Setter Property="Foreground" Value="Green"/> 
     </Style> 

     <DataTemplate x:Key="DefaultDataTemplate"> 
      <TextBlock Text="TestColor" Style="{StaticResource RedStyle}" HorizontalAlignment="Center"/> 
     </DataTemplate> 

     <DataTemplate x:Key="OnMouseOverDataTemplate"> 
      <TextBlock Text="TestColor" Style="{StaticResource GreenStyle}" HorizontalAlignment="Center"/> 
     </DataTemplate> 

     <Style x:Key="StyleDefault" TargetType="{x:Type ContentPresenter}"> 
      <Setter Property="ContentTemplate" Value="{DynamicResource DefaultDataTemplate}"/> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="ContentTemplate" Value="{DynamicResource OnMouseOverDataTemplate }"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Grid.Resources> 
    <Grid> 
     <ContentPresenter Style="{DynamicResource StyleDefault}" Content="{Binding}" /> 
    </Grid> 
    </Grid> 
</Window> 

Дайте ему попробовать. Вы в основном используете Style, который изменит два ContentTemplates в соответствии с событием IsMouseOver.

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