• (21)WPF 样式和行为


      一、样式基础

    样式可以定义一套组合的属性,

    1.xaml方式

        <Window.Resources>
            <Style x:Key="btnStyle">
                <Setter Property="FrameworkElement.Width" Value="200"></Setter>
                <Setter Property="FrameworkElement.Height" Value="50"></Setter>
            </Style>
        </Window.Resources>
    
        <StackPanel FocusManager.IsFocusScope="True">
            <Button  x:Name="btn1" Style="{StaticResource btnStyle}" >new2</Button>
            <Button  x:Name="btn2" Width="200" Height="50" >new2</Button>
        </StackPanel>

    2.代码方式

    使用样式

    btn1.Style = (Style)this.FindResource("btnStyle");

    3.Style类属性

    Seters:

    Triggers:触发器

    Resources:

    BasedOn:

    TargetType:样式自动关联某元素

    4.自动应用样式

    当前窗体下的Button按钮都使用此样式

        <Window.Resources>
            <Style TargetType="Button">
                <Setter Property="FrameworkElement.Width" Value="210"></Setter>
                <Setter Property="FrameworkElement.Height" Value="50"></Setter>
            </Style>
        </Window.Resources>

    二、触发器

    每种触发器都是TriggerBase类的派生类

    Trigger:最简单的触发器,监测依赖属性的变化。

    MultiTrigger:同时满足多个条件时触发。

    DataTrigger:监测任意绑定数据的变化。

    MultiDataTrigger:多个数据触发器。

    EventTrigger:最复杂的触发器,当事件发生时,触发器应用动画。

    1.简单的触发器

    https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.controls.control?view=netframework-4.8   Control类

    当按下tab焦点到btn1时width会变短,btn1按钮失去焦点时又重新变成200

        <Window.Resources>
            <Style x:Key="btnSyle">
                <Style.Setters>
                    <Setter Property="FrameworkElement.Width" Value="200"></Setter>
                    <Setter Property="FrameworkElement.Height" Value="50"></Setter>
                </Style.Setters>
                <Style.Triggers>
                    <Trigger Property="Control.IsFocused" Value="True" >
                        <Setter Property="FrameworkElement.Width" Value="80" />
                    </Trigger>
                </Style.Triggers>
            </Style>       
        </Window.Resources>
    
        <StackPanel FocusManager.IsFocusScope="True">
            <Button  x:Name="btn1" Style="{StaticResource btnSyle}" >new2</Button>
            <Button  x:Name="btn2"  >new2</Button>
        </StackPanel>

    2.多种触发方式

        <Window.Resources>
            <Style x:Key="btnSyle">
                <Style.Setters>
                    <Setter Property="FrameworkElement.Width" Value="200"></Setter>
                    <Setter Property="FrameworkElement.Height" Value="50"></Setter>
                </Style.Setters>
                <Style.Triggers>
                    <Trigger Property="Control.IsFocused" Value="True" >
                        <Setter Property="FrameworkElement.Width" Value="80" />
                    </Trigger>
                </Style.Triggers>
            </Style>       
        </Window.Resources>
    
        <StackPanel FocusManager.IsFocusScope="True">
            <Button  x:Name="btn1" Style="{StaticResource btnSyle}" >new2</Button>
            <Button  x:Name="btn2"  >new2</Button>
        </StackPanel>

    3.同时满足多个条件的触发

    同时满足鼠标悬停在控件并且焦点也在控件时触发

        <Window.Resources>
            <Style x:Key="btnSyle">
                <Style.Setters>
                    <Setter Property="FrameworkElement.Width" Value="200"></Setter>
                    <Setter Property="FrameworkElement.Height" Value="50"></Setter>
                </Style.Setters>
                <Style.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="Control.IsFocused" Value="True"></Condition>
                            <Condition Property="Control.IsMouseOver" Value="True"></Condition>
                        </MultiTrigger.Conditions>
                        <MultiTrigger.Setters>
                            <Setter Property="FrameworkElement.Width" Value="80" />
                        </MultiTrigger.Setters>
                    </MultiTrigger>
                </Style.Triggers>
            </Style>
        </Window.Resources>

    4.事件触发器

    普通的触发器等待属性改变时触发,事件触发器等待事件改变时触发

    三、行为

  • 相关阅读:
    Spring MVC 完全注解方式配置web项目
    spring WebServiceTemplate 调用 axis1.4 发布的webservice
    修改Intellij Idea 创建maven项目默认Java编译版本
    Git Commit提交规范和IDEA插件Git Commit Template的使用
    myEclipse10安装以及破解
    ES6中Map与其他数据结构的互相转换
    ES6用来判断数值的相关函数
    WebStorm使用码云插件问题
    Css解决表格超出部分用省略号显示
    Js/Jquery获取网页屏幕可见区域高度
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/12186815.html
Copyright © 2020-2023  润新知