9

我对 WPF 相当陌生,目前正在使用triggers. 我有一个关于简单触发器的问题。通过简单的触发器,我的意思是监视 a 的变化dependency property并使用 asetter来改变样式。

例子:

<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">

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

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

4

3 回答 3

16

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

事实上,你可以让你的Triggerwatch any DependencyProperty,但是因为它在值改变时被“触发”(并且匹配Value你告诉它要观察的),所以只有使用在运行时会改变的属性才有意义,通常来自用户操作(例如焦点、鼠标悬停、按下等)。在这些情况下只有某些DependencyProperties实际的变化值,所以并不是所有的都有意义Triggers

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

请记住,PropertyTriggers它们只是TriggerWPF 中的一种。还有EventTriggersDataTriggersMultiTriggers。这些其他触发器基于事件或数据更改触发,或者在MultiTriggers多个属性(或数据)值的情况下触发。

你有什么具体的事情要做Triggers吗? 这个另一个答案很好地解释了每种触发器的作用。

于 2013-03-01T15:22:20.817 回答
8

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

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

常规触发器可用于对象的任何依赖属性。除了您指定的更常见的触发属性之外,这还包括TextVisibility、等属性: 、和。BackgroundIsFocusedIsMouseOverIsPressed

请注意,根据有关 Trigger.Property 的 MSDN 页面TargetType,如果包含触发器的样式或模板具有其属性集,则无需指定类名前缀

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

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

例如,您可以设置 a DataTriggeron"{Binding Value}""{Binding ElementName=MyTextBox, Path=IsChecked}"。您甚至可以Converters与 DataTriggers 一起使用,例如

<DataTrigger
    Binding="{Binding SomeInt, Converter={StaticResource IsGreaterThanZero}}"
    Value="True">
于 2013-03-01T15:21:47.833 回答
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>

于 2014-05-14T05:40:22.770 回答