zoukankan      html  css  js  c++  java
  • (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.事件触发器

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

    三、行为

  • 相关阅读:
    网络基础知识复习
    JVM参数
    【csp模拟赛5】限制 (restrict.cpp)--数学
    【csp模拟赛5】加减法--宽搜维护联通快
    【csp模拟赛5】购物(shopping.cpp)--常规
    【csp模拟赛4】基站建设 (station.cpp)
    【csp模拟赛4】旅行计划 (travelling.cpp)--欧拉回路
    【csp模拟赛4】 珠江夜游 (cruise.cpp)-二分,贪心
    【分块入门1-9】--分块大法好
    【luoguP3243】[HNOI2015]菜肴制作--拓扑排序
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/12186815.html
Copyright © 2011-2022 走看看