• WPF中样式中事件处理



    之前有个文章是说样式的设置问题,可以参考这个    wpf中的样式

    本文章主要说样式中事件EventSetter和触发器trigger

    1.EventSetter
    EventSetter这个理解比较简单,就是给样式使用者添加一个事件,比如给按钮添加点击事件,提供了另外一个方式来给控件添加事件
    比如这个style
     <Style TargetType="Button">
                    <Setter Property="FontSize" Value="40"></Setter>
                    <EventSetter  Event="Click" Handler="xx"></EventSetter>
                </Style>
    定义了一个button的style,设置字体大小
    EventSetter  就是事件设置,event表示是什么事件,handler表示该事件关联哪个方法
    这样的话就是说本window内的所有button都有有点击事件交给xx方法来处理

    2.trigger触发器

    trigger这个也是style的属性之一,触发器顾名思义就是在使用style样式的元素或者控件的某些属性发生变化的时候才会触发这个事件
    trigger就定义了元素或者控件如何响应特点属性发生变化时候进行处理,比如用户输入等等,鼠标移动
    典型的trigger这样定义
     <Style TargetType="Button">
                    <Setter Property="FontSize" Value="40"></Setter>
                    <EventSetter  Event="Click" Handler="xx"></EventSetter>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="FontSize" Value="20"></Setter>
                            <Setter Property="Foreground" Value="blue"></Setter>
                        </Trigger>
                    </Style.Triggers>
                </Style>
    trigger仍在在style中定义。这个定义表示,当button有IsMouseOver的这个属性变化成True的时候,会开始对他的fontsize和foreground的属性发生变化
    通过运行vs就会发现,鼠标在button上停留的时候button的字体大小会变小而且颜色会变蓝色,鼠标离开以后就会恢复回来

    3.MultiTrigger
    多触发器,这个意思是说只有在两个或者两个以上的属性发生变化的时候才会引发触发器,不像之前的例子一个属性变化就会引发触发器
    典型语法,仍然在style中
    <style>
     <Style.Triggers>
     <MultiTrigger>
                            <MultiTrigger.Conditions>//罗利条件,条件的集合,
                                <Condition Property="IsPressed" Value="true"></Condition>
                                <Condition Property="IsMouseOver" Value="true"></Condition>
                            </MultiTrigger.Conditions>
                            <Setter Property="FontStyle" Value="Italic"></Setter>//在以上条件下才发生的属性变化
                        </MultiTrigger>
    </ <Style.Triggers>>
    </style>

    4.datatrigger

    数据触发和trigger类似,不同的是 binding代替了property属性
    <style>
    < Style.Triggers>
    <DataTrigger Binding="{Binding ElementName=tb,Path=Text.Length}" Value="0">
                            <Setter Property="IsEnabled" Value="false"></Setter>
                        </DataTrigger>
     </Style.Triggers>
    </style>
    这个绑定设置到了一个textbox文本控件,如果textbox控件内容为空的时候,就会引发按钮isenabled=false
    当然默认启动的时候textbox内容就是为空,所以初始化的时候按钮的isenabled=false,只有文本框内容输入内容的时候按钮的isenabled才等true

    此外还有一个MultiDataTrigger,可以参考3,其实一样的


    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    uniApp 滑动手势事件判定 支持NVUE
    按照指定数字 分割数组
    我引用中没有Spire.Pdf,但是发现无法解析的“Spire.Pdf”的不同版本之间存在冲突
    RedisUtil工具类
    Hutool操作excel
    Java 值传递与引用传递
    修改homestead中PHP cli版本
    VS2022 vs2022 servicehub.roslyncodeanalysisservice.exe 占用内存过高
    操作系统
    Spring Security BCryptPasswordEncoder 每次Hash出来的值都不同?
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319316.html
Copyright © 2020-2023  润新知