WPF 基础入门 (触发器)

    WPF有个主题,就是以声明的方式扩展代码的功能,当使用样式、资源或者数据绑定时,将发现即使不适用代码,也能完成不少工作,这个时候就要使用触发器了,当属性发生变化时,可以进行响应,并自动调整样式。每个样式可以有任意多个触发器,而且每个触发器都是System.Windows.TriggerBase的派生类的实例。

    简单理解就是:在样式中设置触发器,在触发器中设置属性名称和属性值。

继承自TriggerBase的类
Trigger 这是一种简单的触发器,可以监测依赖项属性的变化,然后使用设置器改变样式
MultiTrigger 与Trigger类似,但这种触发器联合了多个条件,只有满足了所有这些条件,才会启动出触发器
DataTrigger 数据绑定触发器
MultiDataTrigger 联合多个数据触发器
EventTrigger 这是复杂的触发器,当事件发生时,这种触发器应用动画

1、简单触发器。

    可以为任何依赖项属性关联简单触发器,每个简单的触发器都指定了正在监视的属性,以及正在等待的属性值,当属性值出现时,将应用存储在Trigger.Setters集合中的设置器(不能使用复杂的触发器逻辑)。

 <Window.Resources>
        <Style x:Key="BigFontButton">
            <Style.Setters>
                <Setter Property="Control.FontSize" Value="30"></Setter>
                <Setter Property="Control.FontFamily" Value="楷体"></Setter>
            </Style.Setters>
            <!--在样式中设置触发器-->
            <Style.Triggers>
                <!--如果元素获取了焦点。-->
                <Trigger Property="Control.IsFocused" Value="true">
                    <!--设置其中的元素属性。设置前景色为紫色。-->
                    <Setter Property="Control.Foreground" Value="Pink"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
        <!--设置一个简单的触发器,在触发器中改变元素的背景色。-->
        <Style x:Key="SetButton">
            <Style.Triggers>
                <Trigger Property="Control.IsFocused" Value="true">
                    <Setter Property="Control.Background" Value="Yellow"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <StackPanel>
        <!--设置第一个样式-->
        <Button Style="{StaticResource BigFontButton}">Hello,World!!!</Button>
        <!--设置第二个样式-->
        <Button Style="{StaticResource SetButton}" Height="50" FontSize="30">Hello,World!!!</Button>
    </StackPanel>
</Window>

 2、为元素设置样式(嵌套形式)

<Button Height="50" FontSize="30" Content="今天天气好晴朗!!!">
	<Button.Style>
		<Style>
			<Style.Triggers>
				<Trigger Property="Control.IsMouseOver" Value="true">
					<!--可将S属性样式写在Trigger.Setters中(方式一)-->
					<!--<Trigger.Setters>
					<Setter Property="Control.Foreground" Value="Red"></Setter>
			</Trigger.Setters>-->

					<!--(方式二)-->
					<!--也可以直接写在Triggr中,视情况而定,如果触发器满足多个条件时,要使用第一种方式设置属性值。-->
					<Setter Property="Control.Foreground" Value="Red"></Setter>
				</Trigger>
			</Style.Triggers>
		</Style>
	</Button.Style>
</Button>

3MultiTrigger触发器(满足多条件的触发器)

    如果希望创建只有当几个条件都为真时才激活的触发器,可使用MultiTrigger,这种触发器提供了一个Conditions(条件)集合,可通过该集合定义一系列属性值的集合。

<Window.Resources>
	<Style x:Key="SetButton">
		<!--触发器-->
		<Style.Triggers>
			<!--使用多条件触发器-->
			<MultiTrigger>
				<!--通过Conditions属性设置多个条件(一个是获取焦点和鼠标移动到元素上。)。-->
				<MultiTrigger.Conditions>
					<Condition Property="Control.IsFocused" Value="true"></Condition>
					<Condition Property="Control.IsMouseOver" Value="true"></Condition>
				</MultiTrigger.Conditions>

				<!--设置多个属性值-->
				<MultiTrigger.Setters>
					<Setter Property="Control.FontSize" Value="30"></Setter>
				</MultiTrigger.Setters>
			</MultiTrigger>
		</Style.Triggers>
	</Style>
</Window.Resources>
<StackPanel>
	<!--设置样式。-->
	<Button Style="{StaticResource SetButton}">Hello,World!!!</Button>
</StackPanel>

4、事件触发器

    普通触发器是等待属性发生变化,而事件触发器是等待特定的事件被引发。事件触发器要求用户提供一系列修改控件的动作,这些动作通常被应用为动画。

<Window.Resources>
        <Style x:Key="SetButtonMouseOver">
            <!--设置触发器-->
            <Style.Triggers>
                <!--设置触发器的路由事件-->
                <EventTrigger RoutedEvent="Control.MouseEnter">
                    <!--设置一个动画,改变元素的字体的大小-->
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Duration="0:0:0:2" Storyboard.TargetProperty="FontSize" To="30"></DoubleAnimation>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <StackPanel>
        <!--设置样式-->
        <Button Style="{StaticResource SetButtonMouseOver}">Hello,World!!!</Button>
    </StackPanel>

**************************************************************************************************************

相关推荐

  1. WPF 基础入门触发器

    2023-12-30 06:34:02       58 阅读
  2. WPF 触发器

    2023-12-30 06:34:02       40 阅读
  3. WPF 基础入门(样式)

    2023-12-30 06:34:02       61 阅读
  4. WPF 基础入门 (Binding 一)

    2023-12-30 06:34:02       54 阅读
  5. WPF触发器与模板

    2023-12-30 06:34:02       37 阅读
  6. WPF 基础入门(XAML理解二)

    2023-12-30 06:34:02       57 阅读
  7. WPF触发器的多种写法

    2023-12-30 06:34:02       64 阅读
  8. WPF 中 样式触发器机制 Style.Triggers

    2023-12-30 06:34:02       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-30 06:34:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-30 06:34:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-30 06:34:02       82 阅读
  4. Python语言-面向对象

    2023-12-30 06:34:02       91 阅读

热门阅读

  1. oj习题8577 合并顺序表

    2023-12-30 06:34:02       47 阅读
  2. 使用 Docker Compose 部署 Halo 2.x 与 MySQL

    2023-12-30 06:34:02       66 阅读
  3. Rust在写库时实现缓存

    2023-12-30 06:34:02       63 阅读
  4. (一)window使用VMware运行Centos7

    2023-12-30 06:34:02       63 阅读
  5. spring boot使用配置文件对静态变量进行赋值

    2023-12-30 06:34:02       62 阅读
  6. git异常

    2023-12-30 06:34:02       53 阅读
  7. Vue的watch功能:实现响应式数据更新

    2023-12-30 06:34:02       64 阅读