首页 > 其他分享 >【WPF 】ItemTemplateSelector模板选择器

【WPF 】ItemTemplateSelector模板选择器

时间:2022-09-28 23:46:27浏览次数:53  
标签:stuList Windows System public new ItemTemplateSelector using WPF 选择器

WPF 的 ItemsControl 数据绑定中,有时会遇到绑定的数据源是多种类型,并且需要对不同类型使用不同的模板。这个时候就需要用到 ItemTemplateSelector。

ItemTemplateSelector 是 DataTemplateSelector 类型,通常需要定义一个类继承 DataTemplateSelector。

项目结构:

 

 创建一个模板选择类TestDataTemplateSelector:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

namespace WpfApp2
{
    public class TestDataTemplateSelector: DataTemplateSelector
    {
        public DataTemplate HighTemplate { get; set; }

        public DataTemplate LowTemplate { get; set; }

        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            var stu = (Student)item;
            if (stu.Result > 60)
                return HighTemplate;
            else
                return LowTemplate;
        }
    }
}

MainWindow.xaml代码:
在Window.Resources中定义了两个模板HighTemplate和LowTemplate。

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <DataTemplate x:Key="HighTemplate">
            <StackPanel>
                <TextBlock Text="{Binding Name}"/>
                <TextBlock Text="考的非常好!"/>
            </StackPanel>
        </DataTemplate>

        <DataTemplate x:Key="LowTemplate">
            <StackPanel Background="Red">
                <TextBlock Text="{Binding Name}"/>
                <TextBlock Text="电话家长警告!"/>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <ListBox x:Name="list" ItemsSource="{Binding Model}">
            <ListBox.ItemTemplateSelector>
                <local:TestDataTemplateSelector HighTemplate="{StaticResource HighTemplate}" LowTemplate="{StaticResource LowTemplate}"/>
            </ListBox.ItemTemplateSelector>
        </ListBox>
    </Grid>
</Window>

MainWindow.xaml.cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp2
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            List<Student> stuList = new List<Student>();
            stuList.Add(new Student() { Name = "A", Result = 40 });
            stuList.Add(new Student() { Name = "B", Result = 50 });
            stuList.Add(new Student() { Name = "C", Result = 60 });
            stuList.Add(new Student() { Name = "D", Result = 70 });
            stuList.Add(new Student() { Name = "E", Result = 80 });

            list.DataContext = new { Model = stuList};
        }
    }


    public class Student
    {
        public string Name { get; set; }
        public int Result { get; set; }
    }
}

运行结果:
根据学生成绩结果来选择不同的模板展示数据。

 

标签:stuList,Windows,System,public,new,ItemTemplateSelector,using,WPF,选择器
From: https://www.cnblogs.com/cdaniu/p/16739980.html

相关文章

  • 06.选择器
    概述普通选择器是id优先级最高.是class关系选择器父子元素div后面紧跟着的p元素COntent1属性选择器(不常用)第一种示例第二种示例伪类选择器连接的......
  • WPF应用图标更改,打包后安装依然显示原来的图标
    前因:更改项目的应用图标重新打包安装,发现桌面快捷方式图标依然没改,将该exe文件发送或者拷贝到桌面还是图标没改;但是,将exe文件拷贝到其它文件夹或者磁盘下,图标显示已经改了;......
  • [WPF] 用CefShap仿制浏览器
    多标签页使用第三方库Dragablz可以很轻易地实现可拖动的标签页,多个标签页通过相同的缓存路径共享会话,两个箭头是切换标签页(仅超出时显示),右上角是窗口按钮。......
  • wpf 使用 Generic Host
    wpf使用GenericHostpublicpartialclassApp:Application{privateIHost_host;publicApp(){_host=newHostBuilder().C......
  • 25 bootstrap--v3--datetimepicker时间选择器--应用
    在模板中引用响应的文件比如:layout.html<linkrel="stylesheet"href="{%static'stark/plugins/datetimepicker/css/bootstrap-datetimepicker.css'%}"/><scripts......
  • ElementUI多个级联选择器el-cascader新增、删除和回显
    需求说明:同一个页面新增时,默认只显示一个选择器(选择器是循环出来的),可以新增、删除、编辑;编辑的时候根据后端返回数据循环显示选择器列表,可新增、删除、编辑;数据说明:后端默......
  • WPF 自定义可拖动标题栏
    要注意,拖拽的地方,需要加背景色,否则DrageMove 将无效MainWindows.xaml<Windowx:Class="Report.MainWindow"xmlns="http://schemas.microsoft.com......
  • iview中时间选择器组件改变日期格式
    //改变视图的显示格式,但不会改变value的值的格式format="yyyy-MM-dd"//改变value值的格式@on-change="anZhuangDate=$event" ......
  • WPF 由于系统颜色配置 Mscms 组件损坏启动失败
    本文记录WPF应用程序,因为系统的颜色配置Mscms.dll组件损坏导致应用加载图片失败,从而启动失败的原因和解决方法在WPF应用加载图片时,将会调用到系统的Mscms.dll组件......
  • 在 WPF 中实现融合效果
    1.融合效果融合效果是指对两个接近的元素进行高斯模糊后再提高对比度,使它们看上去“粘”在一起。在之前的一篇文章中,我使用Win2D实现了融合效果,效果如下:不过Win2D......