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.事件触发器

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

    三、行为

  • 相关阅读:
    【数字图像处理】 形态学转换
    【数字图像处理】阈值处理
    【数字图像处理】 图像平滑
    【数字图像处理】直方图均衡化
    【Tool】Augmentor和imgaug——python图像数据增强库
    [caffe] caffe训练tricks
    [Papers] Semantic Segmentation Papers(1)
    【Computer Vision】 复现分割网络(1)——SegNet
    Comet OJ
    NOI2019游记 —— 夏花般绚烂,繁星般璀璨
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/12186815.html
Copyright © 2011-2022 走看看