zoukankan      html  css  js  c++  java
  • WPF 单个触发器、多个触发器、多条件触发器 ^

    Trigger的使用。利用Trigger对象,我们可以接收到属性变化或者事件发生,并据此做出适当的响应。Trigger本身也是支持多种类型的,下面是一个属性Trigger的例子:

    <Style TargetType="ListBoxItem">
    <Setter Property="Opacity" Value="0.5" />
    <Style.Triggers>
    <Trigger Property="IsSelected" Value="True">
    <Setter Property="Opacity" Value="1.0" />
    <!--其他的Setters->
    </Trigger>
    </Style.Triggers>
    </Style>

    这段代码设置ListBoxItem的Opacity属性的默认值为0.5。但是,在IsSelected属性为True时,ListBoxItem的Opacity属性值为1。从上面的代码还可以看出,在满足一个条件后,可以触发多个行为(定义多个Setters)。同样地,上面的Triggers也是一个集合,也可以添加多个Trigger。

    注意上面的多个Trigger是相互独立的,不会互相影响。另一种情况是需要满足多个条件时才触发某种行为。为此,WPF提供了MultiTrigger以满足这种需求。比如:

    <Style TargetType="{x:Type Button}">
    <Style.Triggers>
    <MultiTrigger>
    <MultiTrigger.Conditions>
    <Condition Property="IsMouseOver" Value="True" />
    <Condition Property="Content" Value="{x:Null}" />
    </MultiTrigger.Conditions>
    <Setter Property="Background" Value="Yellow" />
    </MultiTrigger>
    </Style.Triggers>
    </Style>

    这就表示只有IsMouseOver为True、Content为NULL的时候才将Background设置为Yellow。

    以上的Trigger都是基于元素属性的。对于鼠标移动等事件的处理;

    WPF有专门的EventTrigger。但因EventTrigger多数时候是和Storyboard配合使用的;

    现在所讨论的Trigger都是基于属性的值或者事件的。

    温馨提醒:

    对于小的应用程序,这个ControlTemplate一般直接定义在XAML的根元素。对于大的应用程序,通常应该定义在专门的资源XAML文件中,根元素是ResourceDictionary。

    不管定义在什么地方,除了前面用Style定义外观,以及用Resource实现元素重用外

    <ControlTemplate x:Key="templateThermometer" TargetType="{x:Type ProgressBar}">
    <ControlTemplate.Resources>
    <RadialGradientBrush x:Key="brushBowl"
    GradientOrigin="0.3 0.3">
    <GradientStop Offset="0" Color="Pink" />
    <GradientStop Offset="1" Color="Red" />
    </RadialGradientBrush>
    </ControlTemplate.Resources>
    <!-- 忽略其他相关内容-->
    </ControlTemplate>

  • 相关阅读:
    未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.ServiceModel.Activation.HttpModule”。
    服务代理的关闭与并发会话的限制
    批量插入数据利器之SqlBulkCopy
    VS 生成 dll、exe 版本号与SVN版本号一致
    DataTable / DataSet 与 xml 的相互转换
    C# 操作嵌入的资源
    【WCF安全】使用X509证书自定义验证
    预先生事件和后期生成命令事件
    (转)利用WPF的ListView进行大数据量异步加载
    (转)SQL知识_SqlParameter数组
  • 原文地址:https://www.cnblogs.com/babyGee/p/2525828.html
Copyright © 2011-2022 走看看