WPF 中关于 DataTemplateSelector 类的应用

MSDN的解释:

提供一种根据数据对象和与该数据绑定的元素来选择数据模板 DataTemplate 的方法。

示例代码:

<Window x:Class="WpfApplication1.Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="Window2" Height="300" Width="300" Loaded="Window2_OnLoaded">
    <Window.Resources>
        <DataTemplate x:Key="T1">
            <TextBlock Text="{Binding}" Background="DarkBlue" Foreground="White" Padding="10,0"></TextBlock>
        </DataTemplate>

        <DataTemplate x:Key="T2">
            <TextBlock Text="{Binding}" Background="DarkCyan" Foreground="White" Padding="10,0"></TextBlock>
        </DataTemplate>

        <local:CTemplateSelector x:Key="TS"></local:CTemplateSelector>
    </Window.Resources>
    <Grid>
        <ListBox x:Name="Lbox" ItemTemplateSelector="{StaticResource TS}"></ListBox>
    </Grid>
</Window>
public partial class Window2 : Window
{
    public Window2()
    {
        InitializeComponent();
    }

    private void Window2_OnLoaded(object sender, RoutedEventArgs e)
    {
        var source = new List<string>
        {
            "1","2","3","4"
        };

        this.Lbox.ItemsSource = source;
    }
}
public class CTemplateSelector:DataTemplateSelector
{
    public override DataTemplate SelectTemplate( object item, DependencyObject container )
    {
        if (item == null) throw new ArgumentNullException("item");

        var element = container as FrameworkElement;

        if ( element != null )
        {
            var str = item.ToString();
            int val;

            if (int.TryParse(str, out val))
            {
                if (val%2 == 0)
                {
                    return element.FindResource("T1") as DataTemplate;
                }
                else
                {
                    return element.FindResource( "T2" ) as DataTemplate;
                }
            }
        }

        return base.SelectTemplate(item, container);
    }
}

这个示例就是在一个 ListBox 控件中实现隔行换色的功能,当然也可以通过其他方法实现。

运行结果:

参考:

http://msdn.microsoft.com/zh-cn/library/system.windows.controls.datatemplateselector%28v=vs.110%29.aspx

时间: 2024-11-13 11:23:01

WPF 中关于 DataTemplateSelector 类的应用的相关文章

WPF中的Application类。

原文:WPF中的Application类. Application对象用的名称空间是system.windows 1.手动创建Application对象步骤. 1.1).把项目中的App.Xaml文件从项目中排除. 1.2).新建Startup类. 1.3).在类中声明静态的.无返回值的Main方法. 1.4).在方法中创建application对象和窗口对象. public class Startup { [STAThread] //指定应用程序的 COM 线程模式是单线程单元(STA) st

浅析C#(WPF)中的Application类

Application类 封装WFP应用程序. 命名空间:System.Windows 语法:public class Application : DispatcherObject, IQueryAmbient 可以看到Application继承了DispatcherObject类和IQueryAmbient接口. 首先看一下DispatcherObject类 DispatcherObject类 表示与Dispatcher关联的对象 命名空间:System.Windows.Threading 语

WPF中的常用类汇总:

1.FrameworkElement: WPF中大部分的控件都可以转化成FrameworkElement,利用FrameworkElement属性获取相应的值: 2.WPF获取当前工作区域的宽度和高度 SystemParameters.PrimaryScreenWidth  ---获取工作区域的宽度 SystemParameters.PrimaryScreenHeight ---获取工作区域的高度 3.DependencyObject: 该类是所有控件类型的父类:利用该类可以获取某些抽象属性:

WPF中的MatrixTransform

原文:WPF中的MatrixTransform WPF中的MatrixTransform                                                                              周银辉 虽然在WPF中可以使用TranslateTransform.RotateTransform.ScaleTransform等进行几何变换,但我们也可以使用更底层的MatrixTransform(矩阵变换)来进行更复杂的复合变换. 首先我们矩阵如何影响

正确理解WPF中的TemplatedParent

(注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树,由于名称不是很统一,文中统一用英文名称代表两个概念,况且VisualTreeHelper和LogicalTreeHelper也是WPF中提供的类名称) 众所周知WPF中的Logical Tree是逻辑上定义的元素层次树,而实际上显示在屏幕上的元素层次树是Visual Tree,Visual Tree是 (注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树,由于

WPF中查找控件的扩展类

在wpf中查找控件要用到VisualTreeHelper类,但这个类并没有按照名字查找控件的方法,于是搜索网络,整理出下面这个类,感觉用起来很是方便. 贴出来,供大家参考. /// <summary> /// WPF/Silverlight 查找控件扩展方法 /// </summary> public static class VisualHelperTreeExtension { /// <summary> /// 根据控件名称,查找父控件 /// elementNa

WPF 中的 loaded 事件和 Initialized 事件

在 WPF 中, 控件有 Loaded 和 Initialized 两种事件. 初始化和加载控件几乎同时发生, 因此这两个事件也几乎同时触发. 但是他们之间有微妙且重要的区别. 这些区别很容易让人误解. 这里介绍我们设计这些事件的背景. (不仅适用于 Control 类, 同样在通用类如 FrameworkElement 和 FrameworkContentElement 类也适用.) 下面是个小故事: Initialized 事件只说: 这个元素已经被构建出来,并且它的属性值都被设置好了,所以

WPF中使用VisualBrush的实例

本文实现一个名为"你来我往"的小程序,该程序管理着"张三"和"李四"两位童鞋拥有的现金,一开始,两人均拥有100美元的现金,随着将现金从其中一人转移至另外一人,两人拥有的现金数在不断变化,程序可以跟踪这种变化,并正确显示每人拥有的现金数.每次最多可以转移三张纸币,纸币的金额可以是5美元.10美元或者20美元. 程序运行后的效果如图1所示,我们点击"张三"右边的"5美元""10美元"&qu

浅析WPF中MVVM模式下命令与委托的关系

??各位朋友大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com.最近因为项目上的原因开始接触WPF,或许这样一个在现在来讲显得过时的东西,我猜大家不会有兴趣去了解,可是你不会明白对某些保守的项目来讲,安全性比先进性更为重要,所以当你发现银行这类机构还在使用各种"复古"的软件系统的时候,你应该相信这类东西的确有它们存在的意义.与此同时,你会更加深刻地明白一个道理:技术是否先进性和其流行程度本身并无直接联系.由此我们可以推论出:一项不流行