资源字典中的WPF引用样式和使用触发器

时间:2010-04-19 15:29:23

标签: wpf triggers styles resourcedictionary

我在适用的资源字典中定义了Style 所有ComboBox控件。在ComboBox控件中,我引用了这样的样式:

Style="{DynamicResource MyComboBoxStyle}"

这没问题。

我希望能够为某些ComboBox控件添加一些触发器。

使用Style作为动态资源引用的好方法是什么,但仍然可以将Trigger添加到某些ComboBox控件中?

2 个答案:

答案 0 :(得分:1)


<强>更新: 在重新阅读这个问题之后,我意识到这并不是OP所要求的。我可以删除这个,但也许对于偶然发现这个问题的人会有用。


这是一个示例,其中包含定义模板和触发器的xaml资源字典,以及引用该资源并应用样式的窗口。

它可能会帮助有人使用模板和触发器:

我的资源名为“Style1.xaml”

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ControlTemplate x:Key="TonyTemplate" TargetType="Button">
    <Border Name="Border" 
            BorderBrush="Orange" 
            BorderThickness="3" 
            CornerRadius="2" 
            Background="Ivory" 
            TextBlock.Foreground="Black">
        <Grid>
            <ContentPresenter RecognizesAccessKey="True" 
                              Margin="{TemplateBinding Padding}"/>
        </Grid>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter TargetName="Border" Property="Background" Value="Yellow" />
        </Trigger>
        <Trigger Property="IsPressed" Value="True">
            <Setter TargetName="Border" Property="Background" Value="Chartreuse" />
            <Setter TargetName="Border" Property="BorderBrush" Value="DarkKhaki" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

我的MainWindow代码xaml:

<Window x:Class="WpfApplication1.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">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Style1.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <Grid>
        <Button Width="100" Height="50" 
                Template="{StaticResource TonyTemplate}" 
                Content="Click me"/>
    </Grid>
</Window>

答案 1 :(得分:0)

为要应用触发器的ComboBox控件创建新样式,并使用新样式的BasedOn属性设置其基本样式。