2015-06-17 59 views
1

是否可以在同一控件上設置Style屬性(例如,Button),範圍是DataTrigger根據屬性選擇風格

我想將我的Default-,MouseOver-和Selected-Styles定義爲資源,以便稍後重用它們。但是,處理MouseOver(和其他)事件似乎通常是通過將更改後的屬性單獨設置爲DataTrigger而不是將新的Style分配給Control(這很有意義,因爲通過分配另一個樣式可以刪除數據觸發器)來完成。

回答

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,根據IsMouseOver事件將更改兩個ContentTemplates