首页
学习
活动
专区
圈层
工具
发布

了解模板化控件(8):ItemsControl

曾经有个说法:了解ContentControl和ItemsControl才能算是了解WPF的控件,这一点在UWP中也是一样的。 ?...但ItemsControl的话题十分庞大,和ContentControl不同,不太适合在这里展开讨论,所以这里就只是稍微讨论核心的思想。...事实上Items中每一项通常都默认使用ContentControl或ContentPresenter显示(譬如ListBoxItem和ComboxItem),所以ItemTemplate相当于它们的ContentTemplate...这是因为ItemsControl支持使用UI虚拟化技术。 假设Items中包含一万个项,为这一万个项创建容器并放到ItemsPanel上,将会造成巨大的内存消耗。...而且拖动ItemsControl的滚动条时由于要将所有一万个容器同时移动,对CPU造成很大的负担。UI虚拟化就是为了解决这两个问题。

1.9K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    .NET Core 3 WPF MVVM框架 Prism系列之区域管理器

    控件身上的 其实后来我去看了下官方的介绍和源码,默认RegionAdapter是有三个,且还支持自定义RegionAdapter,因此在官方的模型图之间我做了点补充: ?...和MedicineMainContent两个视图的激活情况,上代码: MainWindow.xaml: <Button Content="Load...Add和Remove 上述例子用的是ContentControl,我们再用一个ItemsControl的例子,代码如下: MainWindow.xaml: 的WindowCommands 的继承链为:WindowCommands ItemsControl,因此由于Prism...适配器控制 ItemsControl控件及其子控件由于显示一个集合视图,默认全部集合视图是激活的,这时候不能通过Activate和Deactivate方式来控制(会报错),通过Add和Remove来控制要显示哪些视图

    1.7K30

    【愚公系列】2023年11月 WPF控件专题 2023秋招WPF高频面试题

    在这种情况下,需要将字符串数据转换为布尔值。这可以使用值转换器实现。...Page和Window之间的代码共享。易于维护。MVVM 的特性列表它分离了业务层和表示层,如 MVP 和 MVC改进关注点的结构/分离(视图、视图模型和模型)。 实现更好的设计/开发人员工作流程。...Dispatcher 类用于在他的附加线程上执行工作。 它有一个工作项队列,负责在调度程序线程上执行工作项。 31.WPF中StaticResource和DynamicResource之间有什么区别?...应用程序中的调度程序数量始终小于或等于应用程序中的线程数量。38.ContentControl 和 ContentPresenter 之间有什么区别?...39.为什么需要依赖属性?

    4.4K22

    了解模板化控件(10):原则与技巧

    原则 推荐以符合以下原则的方式编写模板化控件: 选择合适的父类:选择合适的父类可以节省大量的工作,从UWP自带的控件中选择父类是最安全的做法,通常的选择是Control、ContentControl、ItemsControl...,也可以选择从RangeBase、Selector中。...不要实施严格的模版约定:模版约定指TemplatePart和TemplateVisualState,应该尽可能减少约定,在没有遵循模版约定的任何一项时也不应该引发异常,要允许ControlTemplate...ItemsControl派生类的子元素控件要使用父元素名称做前缀、-Item做后缀,譬如ComboBox的子元素ComboBoxItem。...很多VisualState都是通用的,譬如Normal、Disabled、Selected,把它们全都写进一个VisualStates的类中可以方便调用。

    1.3K30

    Silverlight 4 中数据绑定发生的变化

    DependencyObject Binding 在Silverlight之前的版本中,其支持的元素绑定只是允许绑定继承自FrameworkElement类下元素,但是比如一些形变比如Transformations...中新增加了格式化字符串的能力。...在这之前如果要做一个数据格式化不得不使用一个Converter来格式化字符串。现在可以使用扩展标记StringFormat来做一些比如日期、货币等的格式化。 在VS2010中也提供了可视化的支持。...数据绑定中有新增加了两个宽展标记TargetNullValue、FallbackValue,TargetNullValue这个标记表示了当绑定值是null的时候显示的值。...,在这里得到了很多的扩充,提供了IDataErrorInfo、INotifyDataErrorInfo从而能得到更多的信息。

    1.5K80

    Prism教程二: Bootstrapper

    大家好,又见面了,我是你们的朋友全栈君。 在程序中使用框架必然要有一个切入点,框架会在这里进行初始化,处理相关配置等。在Prism中扮演这一角色的就是Bootstrapper。...而我们需要做的工作就是在这两个类中选择一个适合自己的,稍微配置一下就可以了。...可以重写这两个方法,加入自定义的获取ModuleCatalog逻辑,比如在CreateModuleCatalog中可以从一个xaml文件中读取Module信息。...以UnityBootstrapper为例,在这一步中会先调用CreateContainer方法,返回一个UnityContainer;然后调用ConfigureContainer方法,在这个方法中主要是将一些常用的类注册到容器中...Prism默认支持Region的控件类型有:TabControl,Selector,ItemsControl,ContentControl。

    1.3K20

    如何将GridViewEX升级到UWP(Universal Windows Platform)平台

    但是在UWP应用中,非常灵活,桌面应用可以在标题栏中添加返回按钮,在移动设备中不仅能使用标题栏中的返回键,也可以使用物理返回键实现导航功能。UWP的方法比较通用,且不需要编写自定义的Xaml文件。...控件使用了简单border作为新分组的占位符,在拖拽项过程中外观是静态的,无法改变。...显然UWP 中的GridView 将所有非空项的该属性都设置为None。因此,如果不重写OnDragOver 方法,Drop 事件就不会被触发。...,调用ItemsControl 响应方法就可以处理Warning VariableSizedWrapGrid存在很多限制,为了解决这些限制,在上述代码中添加 PrepareContainerForItemOverride...之间切换。

    3.6K80

    OEA 中 WPF 树型表格虚拟化设计方案

    它中有两个属性:Index 及 Offset,它们的意义可以从 IndexFromGeneratorPosition 方法中理解出来:     Index 如果大于等于 0 时,则表示一个生成好的项容器在所有已经生成好的项容器中的索引...这是因为,开发人员对于 TreeGrid 的常见用法应该是:TreeGrid 中的每一项是一个表格行 TreeGridRow,而 TreeGridRow 又是一个 ItemsControl,行中其中的每一项才是横向排列的单元格...ItemsControl,内部每一项是一个 DataGridRow,其内部作为 ItemsHost 使用的面板是 DataGridRowsPresenter 类型。...* 另外,需要额外说明下两个 ItemsControl 的数据源:DataGrid 的 ItemsSource 当然就是应用层指定的数据模型的列表,这样,每一个 DataGridRow 的 DataContext...这也是为什么 ListBox 等控件在分组状态下,虚拟化会被关闭的原因:分组后每一项其实是 GroupItem 类型,而每个组的高度并不一致。

    3.7K70

    【翻译】WPF中的数据绑定表达式

    在本文中,让我们研究WPF提供的不同类型的数据绑定表达式。 介绍 数据绑定是一种强大的技术,它允许数据在UI元素和业务模型之间流动。当业务模型中的数据发生变化时,它会自动将更改反映到UI元素上。...该项的第一个值为“60”。因此,第一项没有旧值。 3、集合当前项绑定 在处理集合时使用。使用这个绑定表达式,您可以非常容易地读取SelectedItem的属性。...属性以将其绑定到集合的当前选定项,如下所示。...例如,如果必须计算CountriesList集合的当前项的特定属性。 在这个例子中,我想显示属性“EnglishName”的值。 为此,绑定TextBlock的Text属性,如下所示。... 输出 现在,当列表中的项被选中时,它显示属性

    3.4K30

    WPF 用户控件翻转与内部的内容控件反翻转

    Sty.JudgeFlip.H.ContentControl.BindUc 和 Sty.JudgeFlip.H.ContentControl.BindUc 都是作用于 ContentControl;前者绑定判断用户控件的...针对于 ContentControl 的样式,内部使用的是 LayoutTransform 而不是 RenderTransform,是考虑到 RenderTransform 可能 ContentControl...=”Right” 即可: 既然本次演示的都是 Sty.JudgeFlip.H.ContentControl.BindUc ,那么在 VM 中自然是需要也有一个 Orientation 属性的: 然后在用户控件后台代码中...此时有人可能就要说了,为什么不直接全部使用 ViewModel 中的相关属性呢?...这是因为如果不使用控件后台代码的方向属性,那么在设计视图则不会有翻转的效果,换句话说,如果你有左右两个对称的控件,那么在设计视图中,它们可能都是 “左脚” 的形式,这样就不利于控件的排布设计等。

    87510
    领券