网站文字优化方案,黑龙江省公共资源,网站的发布方案有哪些,自己做的网站如何百度能搜索DataTemplate 顾名思义#xff0c;数据模板#xff0c;在 wpf 中使用非常频繁。
它一般用在带有 DataTemplate 依赖属性的控件中#xff0c;如 ContentControl、集合控件 ListBox、ItemsControl 、TabControls 等。
1. 非集合控件中使用
UserControl.Resources数据模板在 wpf 中使用非常频繁。
它一般用在带有 DataTemplate 依赖属性的控件中如 ContentControl、集合控件 ListBox、ItemsControl 、TabControls 等。
1. 非集合控件中使用
UserControl.ResourcesDataTemplate x:KeyMyDataTemplateGridWidth100Height40BackgroundDeepPink //DataTemplate
/UserControl.Resources在前端代码中应用这个数据模板
ContentControl ContentTemplate{StaticResource MyDataTemplate} /显示如下
2. 集合控件中使用
以 ListBox 为例
假设 ListBox 绑定数据源为下面的 MyItems
public class DataTemplateViewModel
{public IListstring MyItems { get; }public DataTemplateViewModel(){MyItems new Liststring() { Tom~, Jerry~};}
}ListBoxGrid.Column1ItemsSource{Binding MyItems} /在不设置数据模板的情况下默认就是显示字符串 新增一个数据模板
UserControl.ResourcesDataTemplate x:KeyMyDataTemplateGridWidth100Height40BackgroundDeepPinkTextBlock Text{Binding .} ForegroundYellow //Grid/DataTemplate
/UserControl.Resources并应用该模板后
ListBoxGrid.Column1ItemTemplate{StaticResource MyDataTemplate}ItemsSource{Binding MyItems} /显示为 通过上面的例子我们可以知道数据模板可以用来自定义数据展示的方式包括格式、效果、样式等。
3. DataTempate 其它用法
3.1 自动匹配数据类型
上面演示的集合中使用 DataTemplate 的方式数据类型相对简单。实际开发中经常要根据不同数据类型展示不同数据样式。
假设申明一个图形接口
public interface IShape
{string Color { get; }
}一个圆、矩形类各自实现该接口
public class Circle : IShape
{public string Color { get; }public Circle(string color){Color color;}
}public class Rectange : IShape
{public string Color { get; }public Rectange(string color){Color color;}
}集合 Shapes 中包含这些图形实例
public class DataTemplateViewModel
{public IListIShape Shapes { get; }public DataTemplateViewModel(){Shapes new ListIShape(){new Circle(#CC0066),new Rectange(#009900),};}
}设置 DataTemplate 的 DataType 属性不设置 x:key就可以根据图形类型自动应用对应数据模板
ListBoxGrid.Column1ItemsSource{Binding Shapes}ListBox.ResourcesDataTemplate DataType{x:Type views:Circle}Ellipse Width60 Height60 Fill{Binding Color} //DataTemplateDataTemplate DataType{x:Type views:Rectange}Rectangle Width60 Height60 Fill{Binding Color} //DataTemplate/ListBox.Resources
/ListBox效果如下
3.2 DataTemplateSelector
使用 DataTemplateSelector 模板选择器也可以同样实现上面的效果。
我们只需要继承 DataTemplateSelector 类并重载其 SelectTemplate 方法
public class MyDataTemplateSelector : DataTemplateSelector
{public DataTemplate CircleTemplate { get; set; }public DataTemplate RectTemplate { get; set; }public DataTemplate EmptyTemplate { get; set; }public override DataTemplate SelectTemplate(object item, DependencyObject container){if (item is Circle){return CircleTemplate;}else if (item is Rectange){return RectTemplate;}return EmptyTemplate;}
}数据模板 选择器 前端定义这时就要设置 DataTemplate 的 x:key 了
UserControl.ResourcesDataTemplate x:KeyCircle.DataTemplateEllipse Width60 Height60 Fill{Binding Color} //DataTemplateDataTemplate x:KeyRectangle.DataTemplateRectangle Width60 Height60 Fill{Binding Color} //DataTemplateDataTemplate x:KeyEmpty.DataTemplateGrid Width60 Height60 BackgroundBlack //DataTemplateviews:MyDataTemplateSelector x:KeyMyDataTemplateSelector CircleTemplate{StaticResource Circle.DataTemplate}RectTemplate{StaticResource Rectangle.DataTemplate} EmptyTemplate{StaticResource Empty.DataTemplate} /
/UserControl.Resources应用选择器
ListBoxGrid.Column1ItemTemplateSelector{StaticResource MyDataTemplateSelector}ItemsSource{Binding Shapes}
/ListBox新增一个 null 元素配合实验
Shapes new ListIShape()
{new Circle(#CC0066),new Rectange(#009900),null,
};显示效果