zoukankan      html  css  js  c++  java
  • [WPF系列]-数据邦定之DataTemplate 使用 DataTrigger 来应用属性值

    使用 DataTrigger 来应用属性值

    当前表示不会告诉我们某个 Task 是家庭任务还是办公室任务。记住 Task 对象拥有类型为 TaskType 的 TaskType 属性,该类型是一个枚举,其值可以为 Home 和 Work。

    在下面的示例中,DataTrigger 将 border 元素的 BorderBrush 设置为 Yellow(如果 TaskType 属性为 TaskType.Home)。

    <DataTemplate x:Key="myTaskTemplate">
    
    
    ...
    
    
    <DataTemplate.Triggers>
      <DataTrigger Binding="{Binding Path=TaskType}">
        <DataTrigger.Value>
          <local:TaskType>Home</local:TaskType>
        </DataTrigger.Value>
        <Setter TargetName="border" Property="BorderBrush" Value="Yellow"/>
      </DataTrigger>
    </DataTemplate.Triggers>
    
    
    ...
    
    
    </DataTemplate>

    家庭任务的边界显示为黄色,办公室任务的边界显示为浅绿色。

    数据模板示例屏幕快照

    在此示例中,DataTrigger 使用 Setter 来设置属性值。触发器类也拥有 EnterActionsExitActions 属性,这些属性允许您开始一组操作,例如动画操作。而且,还有一个MultiDataTrigger 类,它允许您根据多个数据绑定属性值应用更改。

    就性能而言,使用转换器创建上述效果的效率要高一点。 另外,创建自己的转换器使您可以获得更多的灵活性,因为您提供的是自己的逻辑。 最后,您选择的技术取决于您当时的具体情况和您的偏好。 有关如何编写转换器的信息,请参见IValueConverter

    DataTemplate 中有哪些内容?

    在前面的示例中,我们使用 DataTemplate.Triggers 属性将触发器放入 DataTemplate 中。 触发器的 Setter 设置 DataTemplate 中元素(Border 元素)的属性值。 但是,如果您的 Setters 相关属性不是当前 DataTemplate 中元素的属性,则使用 Style(用于 ListBoxItem 类)设置属性更合适(如果您要绑定的控件是 ListBox)。 例如,如果您想要在鼠标指向某一项时让您的 Trigger 对该项的 Opacity 值进行动画处理,则需要在 ListBoxItem 样式中定义触发器。 有关示例,请参见 Introduction to Styling and Templating Sample(样式和模板化简介示例)。


    通常需要注意:DataTemplate 会应用于每个生成的 ListBoxItem(有关它实际应用的方式和场合的更多信息,请参见 ItemTemplate 页)。 DataTemplate 仅与数据对象的表示和外观有关。 在大多数情况下,所有其他表示方面(例如,项在被选中时的外观或 ListBox 排列项的方式)不在 DataTemplate 定义范围内。 有关示例,请参见对 ItemsControl 进行样式和模板处理一节。

    参考

  • 相关阅读:
    BigPipe_高性能流水线页面技术
    高并发大流量网站 10 个解决方法
    崇高不是比惨
    utf-8无bom格式编码
    go.php
    微信+QQ跳转
    java 设计模式-单例
    HTML连载88-今天把努比亚界面仿真写完了(完结连载)
    Android连载10-动态添加页面、创建一个新闻app
    JavaScript连载9-三目运算符、综合复习
  • 原文地址:https://www.cnblogs.com/HQFZ/p/4169371.html
Copyright © 2011-2022 走看看