首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为基于ItemsControl的控件(如ListView或DataGrid )定义空DataTemplate

如何为基于ItemsControl的控件(如ListView或DataGrid )定义空DataTemplate
EN

Stack Overflow用户
提问于 2011-11-16 15:32:53
回答 3查看 11.1K关注 0票数 16

像ListView这样的ASP.NET控件允许通过设置ListView.EmptyDataTemplate属性来提供自定义模板,此模板将在数据源为空的情况下呈现。

如何在像ListViewDataGrid这样的基于ItemsControl的控件中做同样的事情呢?所以我想在ItemsSource为空的情况下显示我的自定义DataTemplate。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-16 16:44:08

您可以使用基于DataTrigger设置模板属性

例如,

在参考资料中:

代码语言:javascript
运行
AI代码解释
复制
<ControlTemplate x:Key="EmptyListBoxTemplate">
     <TextBlock Text="Items count == 0" />
</ControlTemplate>

控件本身:

代码语言:javascript
运行
AI代码解释
复制
<ListBox ItemsSource="{Binding SomeCollection}">
    <ListBox.Style>
        <Style TargetType="{x:Type ListBox}">
            <Style.Triggers>
                <DataTrigger Value="{x:Null}" Binding="{Binding DataContext.SomeCollection, RelativeSource={RelativeSource Self}}">
                    <Setter Property="Template" Value="{StaticResource EmptyListBoxTemplate}" />
                </DataTrigger>
                <DataTrigger Value="0" Binding="{Binding DataContext.SomeCollection.Count, RelativeSource={RelativeSource Self}}">
                    <Setter Property="Template" Value="{StaticResource EmptyListBoxTemplate}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListBox.Style>
</ListBox>

可能有一种更简单的方法来做绑定,但我现在还没有编译器来弄清楚它是什么:)

票数 9
EN

Stack Overflow用户

发布于 2012-09-12 07:02:37

有一个100%的xaml解决方案,它利用了"HasItems“依赖属性。

代码语言:javascript
运行
AI代码解释
复制
<ItemsControl>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Description}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.Style>
        <Style TargetType="ItemsControl">
            <Style.Triggers>
                <Trigger Property="HasItems" Value="false">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <TextBlock Text="This Control is empty"/>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ItemsControl.Style>
</ItemsControl>
票数 52
EN

Stack Overflow用户

发布于 2011-11-16 15:46:13

你可以使用DataTemplate选择器来做这件事。

http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

更新1

代码:

代码语言:javascript
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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 EmptyRowsTemplate
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Loaded += (o, e) => 
            {
                this.l.ItemsSource = new List<string>(3)
                {
                    "A",
                    null,
                    "B"
                };
            };
        }
    }

    public class TemplateManager : DependencyObject
    {
        public static readonly DependencyProperty BlankDataTemplateProperty =
            DependencyProperty.RegisterAttached("BlankDataTemplate",
            typeof(DataTemplate),
            typeof(TemplateManager),
            new PropertyMetadata(new PropertyChangedCallback((o, e) => 
            {
                ((ItemsControl)o).ItemTemplateSelector = new BlankDataTemplateSelector();
            })));

        public static void SetBlankDataTemplate(DependencyObject o, DataTemplate e)
        {
            o.SetValue(TemplateManager.BlankDataTemplateProperty, e);
        }

        public static DataTemplate GetBlankDataTemplate(DependencyObject o)
        {
            return (DataTemplate)o.GetValue(TemplateManager.BlankDataTemplateProperty);
        }

        private class BlankDataTemplateSelector : DataTemplateSelector
        {
            public BlankDataTemplateSelector()
                : base()
            {
            }

            public override DataTemplate SelectTemplate(object item, DependencyObject container)
            {
                ItemsControl itemControl =
                    (ItemsControl)ItemsControl.ItemsControlFromItemContainer(ItemsControl.ContainerFromElement(null, container));

                if (item == null)
                {
                    return TemplateManager.GetBlankDataTemplate(itemControl);
                }
                else
                {
                    return base.SelectTemplate(item, container);
                }

            }
        }
    }
}

代码语言:javascript
运行
AI代码解释
复制
Markup

代码语言:javascript
运行
AI代码解释
复制
<Window x:Class="EmptyRowsTemplate.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:EmptyRowsTemplate"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListBox x:Name="l">
            <local:TemplateManager.BlankDataTemplate>
                <DataTemplate>
                    <Button Background="Red">No Data!</Button>
                </DataTemplate>
            </local:TemplateManager.BlankDataTemplate>
        </ListBox>
    </Grid>
</Window>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8154213

复制
相关文章
[WPF 自定义控件]创建包含CheckBox的ListBoxItem
不过它用起来不怎么样,与其这样还不如参考UWP的ListView实现,而且动画效果也很好看:
dino.c
2020/02/21
2.9K0
[WPF 自定义控件]创建包含CheckBox的ListBoxItem
WPF里ItemsControl的分组实现 --listbox 实现分组
我们在用到ItemsControl时,有时会用到分组,如ListBox,ListView,DataGrid。WPF的ItemsControl可以实现分组,是依托于GroupStyle,以ListBox为例,他的分组效果图为:
hbbliyong
2018/07/24
1.9K0
WPF里ItemsControl的分组实现 --listbox 实现分组
【愚公系列】2023年10月 WPF控件专题 DataGrid控件详解
WPF控件是Windows Presentation Foundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。
愚公搬代码
2023/10/12
1.3K0
[UWP 自定义控件]了解模板化控件(8):ItemsControl
顾名思义,ItemsControl是展示一组数据的控件,它是UWP UI系统中最重要的控件之一,和展示单一数据的ContentControl构成了UWP UI的绝大部分,ComboBox,ListBox,ListView,FlipView,GridView等控件都继承自ItemsControl。曾经有个说法:了解ContentControl和ItemsControl才能算是了解WPF的控件,这一点在UWP中也是一样的。
dino.c
2019/01/18
1.4K0
[UWP 自定义控件]了解模板化控件(8):ItemsControl
WPF桌面端开发1-常用组件
ListView继承于ListBox,ListBox继承于ItemsControl,所以后面的组件拥有前面组件的一切特性。
码客说
2020/05/09
7160
[WPF自定义控件库]了解如何自定义ItemsControl
对WPF来说ContentControl和ItemsControl是最重要的两个控件。
dino.c
2019/05/21
2.6K0
[WPF自定义控件库]了解如何自定义ItemsControl
基于javaweb的学生成绩管理系统
这是一个数据库的课程设计作业,是基于javaweb的一个学生成绩管理系统,里面涵盖的数据库的增删改查等等操作,前端为了美观用的是bootstrap框架。
用户4585225
2020/12/18
1.4K0
win10 uwp 列表模板选择器 根据数据位置根据不同的数据
本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector。 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不同,那么可以使用 列表模板选择器 来定义自己的列表,让列表中存在不同的显示。
林德熙
2018/09/18
1.3K0
win10 uwp 列表模板选择器
            根据数据位置根据不同的数据
《深入浅出WPF》学习笔记之深入浅出话Binding
  如果把Binding比作数据的桥梁,那么它的两端分别是Binding的源(Source)和目标(Target)。一般源是逻辑层对象,目标是UI层控件对象.
zls365
2021/02/26
5.7K0
如如何基于Docker快速搭建Elasticsearch集群?
Elasticsearch 作为一个搜索引擎,我们对它的基本要求就是存储海量数据并且可以在非常短的时间内查询到我们想要的信息。所以第一步我们需要保证的就是 Elasticsearch 的高可用性,什么是高可用性呢?它通常是指,通过设计减少系统不能提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是 100%。如果系统在某个时刻宕掉了,比如某个网站在某个时间挂掉了,那么就可以它临时是不可用的。所以,为了保证 Elasticsearch 的高可用性,我们就应该尽量减少 Elasticsearch 的不可用时间
码农架构
2020/10/26
5570
如如何基于Docker快速搭建Elasticsearch集群?
WPF 鼠标移动到列表上 显示列表图标
Visibility="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsMouseOver, Converter={StaticResource BooleanToVisibilityConverter}}"
林德熙
2018/09/18
2.5K0
WPF 鼠标移动到列表上 显示列表图标
WPF 鼠标移动到列表上 显示列表图标
Visibility="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsMouseOver, Converter={StaticResource BooleanToVisibilityConverter}}"
林德熙
2022/08/04
1.7K0
首发!DevOps@BOC — 器用之道,如琢如磨
我来自中国银行软件中心的一个开发部门,中国银行软件中心从 2013年开始试点敏捷软件开发以及相关CI、CD等实践,而我们内部真正的提 DevOps 比这个要更晚些。
DevOps时代
2018/10/08
1K0
首发!DevOps@BOC — 器用之道,如琢如磨
精通 WPF UI Virtualization
    本篇博客主要说明如何使用 UI Virtualization(以下简称为 UIV) 来提升 OEA 框架中 TreeGrid 控件的性能,同时,给出了一些学习 UIV 的资源。 问题     最近对 OEA 的 TreeGrid 控件进行了比较大的改造,并使用新的控件来替换了系统中所有的 DataGrid 控件。新的 TreeGrid 控件实现了很多新的功能,(之后会写一篇文章说明),但是最后遗留了一个问题:由于使用它替换了原来的 DataGrid,而 DataGrid 默认是支持 UI Virtu
用户1172223
2018/01/29
2.4K0
精通 WPF UI Virtualization
【愚公系列】2023年10月 WPF控件专题 ListView控件详解
WPF控件是Windows Presentation Foundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。
愚公搬代码
2023/10/11
6980
C# WPF MVVM开发框架Caliburn.Micro 关于Conventions⑧
Caliburn.Micro的一个主要特性是,它能够通过一系列约定消除对锅炉铭牌代码的需求。有些人喜欢习俗,有些人讨厌习俗。这就是为什么CM的约定是完全可定制的,如果不需要,甚至可以完全关闭。如果您要使用约定,并且由于它们在默认情况下处于启用状态,那么最好了解这些约定是什么以及它们是如何工作的。这就是本文的主题。
用户9127601
2022/01/13
2.8K0
《深入浅出WPF》——模板学习
图形用户界面(GUI,Graphic User Interface)应用较之控制台界面(CUI,Command User Interface)应用程序最大的好处就是界面友好、数据显示直观。CUI程序中数据只能以文本的形式线性显示,GUI程序则允许数据以文本、列表、图形等多种形式立体显示。 用户体验在GUI程序设计中起着举足轻重的作用——用户界面设计成什么样子看上去才够漂亮?控件如何安排才简单易用并且少犯错误?(控件并不是越复杂越好)这些都是设计师需要考虑的问题。WPF系统不但支持传统Windows Forms(简称WinForm)编程的用户界面和用户体验设计,更支持使用专门的设计工具Microsoft Expression Blend进行专业设计,同时还推出了以模板为核心的新一代设计理念(这是2010年左右的书,在那时是新理念,放现在较传统.NET开发也还行,不属于落后的技术)。 本章我们就一同来领略WPF强大的模板功能的风采。
全栈程序员站长
2022/09/09
5K0
《深入浅出WPF》——模板学习
WPF 列表控件数据源绑定多个数据集合方法
在 WPF 用的多的列表控件如 ListBox 或 ListView 等,本文告诉大家在这些列表控件上进行绑定多个数据集合来源的多个实现方法。如有一个显示动物列表的控件,需要绑定的数据来源是阿猫和阿狗两个 ObservableCollection 列表,不在后台代码编写合并集合的代码情况下,可以通过 XAML 的编写,绑定多个数据集合
林德熙
2021/05/27
3.6K0
HOW(如) TO(何) 爆破后台
最近经常有人在群里问我或者问别人找到的后台怎么办,很简单,你只需要一个burp和一个牛逼的字典就可以了,下面我来教大家如何去使用burp爆破。
网e渗透安全部
2019/08/09
1.2K0
HOW(如) TO(何) 爆破后台
点击加载更多

相似问题

DataGrid在DataTemplate of ItemsControl中的绑定

11

控件(如ListBox/ListView )的默认ItemTemplate

11

WPF标签,如ItemsControl/Selector

12

绑定到DataTemplate内部的ItemsControl自定义控件

11

Wpf从具有DataTemplate的ItemsControl中触发鼠标事件(如MouseDown、MouseUp、MouseMove、MouseLeftClick)

124
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文