根据房产选择风格

时间:2015-06-17 12:00:47

标签: c# wpf styles datatrigger

是否可以在同一控件的Style内设置Button属性(例如DataTrigger)?

我想将Default-,MouseOver-和Selected-Styles定义为以后重用它们的资源。但是,处理MouseOver(和其他)事件似乎通常是通过在DataTrigger中单独设置更改的属性而不是为控件分配新的Style来完成的(这是有意义的,因为数据触发器将被删除分配另一种风格)。

1 个答案:

答案 0 :(得分: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