WPF触发器属性

WPF触发器属性,wpf,xaml,properties,triggers,Wpf,Xaml,Properties,Triggers,我是WPF的新手,目前正在与之合作。我有一个关于简单触发器的问题。我所说的简单触发器,是指监视a中的更改并使用a来更改样式的触发器 例如: <Style.Triggers> <Trigger Property="Control.IsFocused" Value ="True"> <Setter Property=" Control.Foreground" Value =" DarkRed" /> </Trigger>

我是WPF的新手,目前正在与之合作。我有一个关于简单触发器的问题。我所说的简单触发器,是指监视a中的更改并使用a来更改样式的触发器

例如:

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

我看到的所有示例都使用了以下内容:

问题: 这些是唯一可用的触发器属性吗?如果没有,还有什么其他的存在


我在网上搜索过,但没有结果。也许有人可以解释一下这一点。

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

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

常规触发器可用于对象的任何依赖项属性。除了您指定的更常见的触发属性之外,还包括诸如
文本
可见性
背景
等属性:
IsFocused
IsMouseOver
IsPressed

请注意,根据,如果包含触发器的样式或模板具有其
TargetType
属性集,则不需要指定类名前缀

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

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

例如,您可以在
“{Binding Value}”或
“{Binding ElementName=MyTextBox,Path=IsChecked}”上设置
DataTrigger
。您甚至可以将
转换器
与数据触发器一起使用,例如

<DataTrigger
    Binding="{Binding SomeInt, Converter={StaticResource IsGreaterThanZero}}"
    Value="True">

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

事实上,您可以让您的
触发器
监视任何
依赖属性
,但因为它在值更改时被“触发”(并且与您告诉它要监视的
值匹配),所以只有在运行时使用将更改的属性才有意义,通常是从用户操作(例如焦点、鼠标悬停、按下等)开始。在这些情况下,只有某些
dependencProperties
实际更改值,因此并非所有属性都可以在
触发器中使用

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

请记住,
PropertyTriggers
只是WPF中的
Trigger
的一种风格。还有
事件触发器
数据触发器
多触发器
。这些其他触发器根据事件或数据变化触发,或者在
多触发器
多个属性(或数据)值的情况下触发


您是否正在尝试使用
触发器执行某些特定操作?为每种类型的触发器提供了一个很好的解释。

使用此代码可以更好地体验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>

这是一种魔力。

所以对于常规触发器,没有类似于
Control.IsMouseDown
?@Dom我刚刚在我的答案中添加了一个更新。如果在包含触发器的样式或模板上设置了
TargetType
属性,则不需要在触发器属性上包含类名前缀。因此,如果您的
TargetType
具有
IsMouseDown
属性,那么您可以在
IsMouseDown
上设置触发器,而不是使用
控件。IsMouseDown
不要忘记
EventTriggers
。我在回答中忘记了
EventTriggers
多触发器
,因为我几乎从未使用过它们。谢谢你提醒我!:):)。同意@Rachel,
EventTriggers
远不常见。我可能只用过几次。