WPF触发器属性

时间:2013-03-01 15:10:17

标签: wpf xaml properties triggers

我是WPF的新手,我目前正在使用triggers。我有一个关于简单触发器的问题。通过简单触发器,我的意思是监视dependency property中的更改并使用setter来更改样式。

示例:

<Style.Triggers>
    <Trigger Property="Control.IsFocused" Value ="True">
        <Setter Property=" Control.Foreground" Value =" DarkRed" />
    </Trigger>
</Style.Triggers>

我见过的所有示例都使用了以下trigger properties

  • <Trigger Property="Control.IsFocused" Value ="True">
  • <Trigger Property="Control.IsMouseOver" Value ="True">
  • <Trigger Property="Button.IsPressed" Value ="True">

问题: 这些触发器属性是否可用?如果没有,其他人存在什么?

我在网上搜索但无济于事。也许有人可以对此有所了解。

3 个答案:

答案 0 :(得分:13)

这些不是您在Triggers中可以使用的唯一属性,但是,它们是常见示例,因为它们易于理解且易于演示。

事实上,您可以让Trigger观看任何DependencyProperty,但因为当值发生变化时它会被“触发”(并且与Value匹配,您需要注意) ,只有使用会在运行时更改的属性才有意义,通常来自用户操作(例如焦点,鼠标悬停,按下等)。在这些情况下,只有某些DependencyProperties实际更改值,因此并非所有这些都在Triggers中使用。

Microsoft已在标准控件中添加了多个DependencyProperties,以便您可以根据更改轻松创建触发器。但是,您也可以使用自己的DependencyProperties创建自己的控件,并在自定义DependencyProperties更改时触发响应。

请注意,PropertyTriggers只是WPF中Trigger的一种风格。还有EventTriggersDataTriggers以及MultiTriggers。这些其他触发器基于事件或数据更改触发,或者在MultiTriggers多个属性(或数据)值的情况下触发。

您是否正在尝试使用TriggersThis other answer为每种类型的触发器提供了很好的解释。

答案 1 :(得分:8)

WPF中有多种类型的触发器,但最常用的两种触发器是常规TriggersDataTriggers

两种类型的触发器都会监视某个值,当它更改为与指定的Value匹配时,它们会应用您的样式设置器。

常规触发器可用于对象的任何依赖属性。除了您指定的更常见的触发属性外,还包括TextVisibilityBackground等属性:IsFocusedIsMouseOver和{{ 1}}。

请注意,根据MSDN page about Trigger.Property,如果包含触发器的样式或模板具有IsPressed属性集

,则无需指定类名前缀

一种简单的方法是记住它,如果你可以绑定属性,你可以在它上面设置一个触发器。

DataTriggers 是监视绑定值而不是依赖属性的触发器。它们允许您观察绑定表达式,并在绑定计算结果等于您的值时作出反应。

例如,您可以在TargetTypeDataTrigger上设置"{Binding Value}"。您甚至可以将"{Binding ElementName=MyTextBox, Path=IsChecked}"与DataTriggers一起使用,例如

Converters

答案 2 :(得分:0)

使用此代码可以更好地体验wpf中的触发器。

<Window x:Class="DataBinding.Trigger2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Trigger2" Height="500" Width="500">
<Window.Resources>
    <Style TargetType="Button">
        <Style.Setters>
            <Setter Property="FontFamily" Value="Tahoma"></Setter>
            <Setter Property="FontSize" Value="15"></Setter>
            <Setter Property="FontWeight" Value="Bold"></Setter>
            <Setter Property="Height" Value="25"></Setter>
            <Setter Property="Width" Value="100"></Setter>

        </Style.Setters>
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Background" Value="Purple"></Setter>
                <Setter Property="Foreground" Value="DarkCyan"></Setter>
                <Setter Property="FontFamily" Value="Franklin Gothic"></Setter>
                <Setter Property="FontSize" Value="10"></Setter>
                <Setter Property="FontWeight" Value="Normal"></Setter>
                <Setter Property="Height" Value="50"></Setter>
                <Setter Property="Width" Value="200"></Setter>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Red"></Setter>
                <Setter Property="Foreground" Value="White"></Setter>
                <Setter Property="FontFamily" Value="Calibri"></Setter>
                <Setter Property="FontSize" Value="25"></Setter>
                <Setter Property="FontWeight" Value="Heavy"></Setter>
                <Setter Property="Height" Value="100"></Setter>
                <Setter Property="Width" Value="400"></Setter>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" Value="Green"></Setter>
                <Setter Property="Foreground" Value="Violet"></Setter>
                <Setter Property="FontFamily" Value="Times New Roman"></Setter>
                <Setter Property="FontSize" Value="20"></Setter>
                <Setter Property="FontWeight" Value="Thin"></Setter>
                <Setter Property="Height" Value="250"></Setter>
                <Setter Property="Width" Value="250"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<Button>It's a Magic.</Button>