WPF触发器属性

9
我是一个WPF新手,目前正在使用触发器。我有一个关于简单触发器的问题。通过简单触发器,我指的是监视依赖属性的更改并使用setter来更改样式的触发器。
例如:
<Style.Triggers>
    <Trigger Property="Control.IsFocused" Value ="True">
        <Setter Property=" Control.Foreground" Value =" DarkRed" />
    </Trigger>
</Style.Triggers>

我看到的所有示例都使用了以下触发属性
  • <Trigger Property="Control.IsFocused" Value ="True">
  • <Trigger Property="Control.IsMouseOver" Value ="True">
  • <Trigger Property="Button.IsPressed" Value ="True">
问题: 这些是唯一可用的触发属性吗?如果不是,还有哪些?
我在网上搜索了一下,但没有结果。也许有人能够解答。
3个回答

16
以下并不是你可以在Triggers中使用的全部属性,但它们是常见的示例,因为它们容易理解且易于演示。
实际上,你可以让你的Trigger监视任何DependencyProperty,但由于它会在值更改时被"触发"(并匹配您告诉它要监视的Value),因此只有在运行时更改的属性才有意义,通常是由用户操作引起的(例如焦点、鼠标悬停、按下等)。只有某些DependencyProperties在这些情况下实际更改值,因此并非所有DependencyProperties都适合在Triggers中使用。
Microsoft已经向标准控件添加了几个DependencyProperties,以便根据更改轻松创建触发器。但是,你也可以创建自己的控件,并具有响应于自定义DependencyProperties更改的触发器。
请记住,PropertyTriggers只是WPF中的一种触发器。还有EventTriggersDataTriggersMultiTriggers。这些其他触发器基于事件或数据变化触发,或者在MultiTriggers的情况下,基于多个属性(或数据)值触发。
你是否有特定的Triggers需求?这个答案提供了每种类型触发器所做的良好解释。

我在回答中忘记了EventTriggersMultiTriggers,因为我几乎从不使用它们。谢谢你提醒我! :) - Rachel
同意@Rachel,EventTriggers并不常见。我可能只用过几次。 - Brian S

9

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

这两种触发器都会监视一个值,当它改变以匹配指定的Value时,它们就会应用你的样式设置。

常规触发器可用于对象的任何依赖属性。这包括像TextVisibilityBackground等属性,除了你指定的更常见的触发属性:IsFocusedIsMouseOverIsPressed

请注意,根据Trigger.Property的MSDN页面,如果包含触发器的样式或模板设置了其TargetType属性,则不需要指定类名称前缀。

记住一件容易的事情,如果你可以绑定属性,那么你就可以在它上面设置触发器。

DataTriggers是触发器,它们监视绑定值而不是依赖属性。它们允许你监视绑定表达式,并在该绑定评估等于你的值时做出反应。

例如,你可以在"{Binding Value}""{Binding ElementName=MyTextBox, Path=IsChecked}"上设置一个DataTrigger。你甚至可以使用Converters与DataTriggers,比如

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

那么对于常规触发器,没有像…… Control.IsMouseDown 这样的属性吗? - Dom
1
@Dom 我刚刚更新了我的答案。如果您在样式或模板中设置了TargetType属性,则不需要在触发属性上包含类名前缀。因此,如果您的TargetType具有IsMouseDown属性,则可以在IsMouseDown上设置触发器,而无需使用Control.IsMouseDown - Rachel
1
不要忘记 EventTriggers - Brian S

1
使用此代码可以在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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接