" /> ListBox> ListBoxItem Content="ListBoxItem 1" /> ListBoxItem Content="ListBoxItem...2" /> ListBoxItem Content="ListBoxItem 3" /> ListBox> ?...是不是觉得它们中出了一个叛徒?这个示例中除了ListBox控件其它都自带Header,但是ListBox没有Header属性,只好用一个TextBlock模仿它的Header。..."> ListBox> ListBoxItem Content="ListBoxItem 1" /> ListBoxItem Content...="ListBoxItem 2" /> ListBoxItem Content="ListBoxItem 3" /> ListBox> </local
虽然是ListView的方法,但它同样适用于ListBox。所以我使用这个方式封装了一个ListBox控件,目前基本上没什么功能,就只是在每个ListBoxItem前面加上一个CheckBox。...以前介绍过如何自定义ItemsControl,要自定义一个ListBox控件,同样需要三部: 定义ListBox 关联ListBoxItem和ListBox 实现ListBox的逻辑 public class...ListBox的IsMultiSelectCheckBoxEnabled和SelectionMode,所以需要给ListBoxItem添加一个Owner属性,并重载ListBox的PrepareContainerForItemOverride...) listBoxItem.Owner = this; } ListBoxItem中使用监视Owner的IsMultiSelectCheckBoxEnabled和SelectionMode...); } 为了使用VisualState我在ControlTemplate多写了80行代码,因为没有用上VisualTransition所以这个ControlTemplate有一些Bug,反正只是用来验证添加的两个
手势功能在手持平台应用较为丰富,PC上的应用还不是很多,不过还是有一些软件已应用这个功能如遨游浏览器等,应用得当还是相当可以丰富用户的互交体验的。...接下来我将介绍如何为ListBox添加手势功能支持。...Name="listBox1" SelectionMode="Extended" Height="350" Width="780"> ListBoxItem...Content="Ok" /> ListBoxItem Content="Maxzhang" /> ListBoxItem...Content="wuhao" /> ListBoxItem Content="xiaoge" /> ListBoxItem
前言 ItemsControl和ListBox都可以用做列表,既然是列表,那么我们怎样获取列表点击的项呢。...ListBox点击列表项后就不能再触发点击事件,而ItemsControl压根就没有选中项,那么怎样处理呢?...ListBox 自定义ListBox,当item选中后再重置为未选中 自定义ListBox using System; using System.Collections.Generic; using System.Linq...} if (dep == null) { return; } ListBoxItem item = (ListBoxItem)dep;...{ var child = VisualTreeHelper.GetChild(parent, i); // 如果子控件不是需查找的控件类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 ListBox Name="WalterlvDemoListBox"> ListBox.Resources>... ListBoxItem...>Walterlv End Item 1ListBoxItem> ListBoxItem>Walterlv End Item 2ListBoxItem>... ListBox.ItemsSource> ListBox> 关于 CompositeCollection 的使用示例可以参考: How to...ConditionalWeakTable 做非 WPF 版本的缓存 如果你有一些非 WPF 的对象需要做类似 WPF 那种附加属性,那么可以考虑使用 ConditionalWeakTable 来实现,Key 是那个对象,而
默认情况下,Silverlight自带的ListBox控件如果内部有多个TextBox,用户无法用键盘上的Tab键,在ListBox内部的TextBox之间切换。...设置成Local即可(而SL自带的ListBox就算设置了这二个属性,Tab键需要按二次才能切换焦点) 完整Xaml代码: <UserControl xmlns="http://schemas.microsoft.com...> ListBox.ItemContainerStyle> ListBoxItem">...Template"> ListBoxItem...,无法应用Blend中的MouseDragElementBehavior(即:应用该行为仍然无法拖动ListBox),但是telerik:ListBox发现居然可以(本例中,用鼠标按住telerik:ListBox
对应ListBoxItem,ComboBox对应ComboBoxItem。...如果ItemsControl的Items内容不是对应的子元素控件,ItemsControl会创建对应的子元素控件作为容器再把Item放进去。...例如这段XAML中,Item1和Item2是ListBox的LogicalChildren,而它们会被ListBox封装到ListBoxItem,ListBoxItem才是ListBox的VisualChildren...在这个例子中,ListBoxItem可以称作ItemContainer。...在Repeater中,只有RepeaterItem返回True,即如果Item的类型不是RepeaterItem,就将它作使用RepeaterItem包装起来。
在学习Style的过程中,经常会遇到另外一个概念:模板(Template),初期经常被他们搞混淆,其实这二者有明显的区别:Style影响外观,而Template影响内容,它们之间通过绑定联系起来(它们之间的联系也可以这样理解...--数据项样式(外观)--> ListBoxItem"> ListBoxItem"> ListBoxItem"> ...> ListBox> ListBox Style="{StaticResource ListStyle}" ItemsPanel="{StaticResource HorizontalItemPanel
Image(头像)、Button(未读数)、TextBlock(昵称、时间和聊天内容) ListBoxItem..."> ListBoxItem... 需要注意的是:此处必须要重写控件模板,而不能重写数据模板...通讯录部分,和聊天列表差不多,不过,由于需要进行分组,也就是A、B……这种组合,所以用的Object类型,在点选过程中,通过is来进行判别是不是WeChatUser,如果是,则进行转换,来进一步处理。...最大化问题,是我一直还没有想到好的解决办法,最大化的情况下会占据整个屏幕,而不把状态栏空出来,网上的办法都是重新设置Width和Height,但是这样的话,就要记录原来的大小和位置,一直没有找到可以重写
PlaneProjection/> ListBox... x:Name="listBox" Grid.Column="1" Style="{StaticResource ListBoxStyle}" ItemContainerStyle="{StaticResource...new Image(); img.Height = 150; img.Width = 150; img.Source = bitmap; img.Stretch = Stretch.Uniform; ListBoxItem... item = new ListBoxItem(); item.Content = img; listBox.Items.Add(item); 既然截图没问题了,那就考虑保存为PNG,使用了这个网站的...下面这个SL中,左边和右边的框里面加了100个Grid和TextBox,而中间那个什么都没有加。
本文将针对 WPF 的 TextBox 文本框,探究其中的一种验证方式 —— 使用 INotifyDataErrorInfo 在数据对象中进行验证。...而按《WPF 编程宝典》一书的描述,INotifyDataErrorInfo 其实可以看作是 IDataErrorInfo 的升级版: IDataErrorInfo 和 INotifyDataErrorInfo...所以,本文直接研究 INotifyDataErrorInfo。后续可能还会研究其它不是针对数据对象的验证方式,这是后话了,暂且不表。...四、实现验证接口 首先我们让绑定基类实现 INotifyDataErrorInfo 接口,实现该接口要实现三个成员: 具体为,一个获取错误列表的方法 GetErrors,一个指示是否存在错误的属性 HasErrors...而两个方法主要是对错误列表进行相应的操作,并且触发变动事件。
Rectangle Width="1" Fill="{StaticResource HeadSplitor}"> 注意,这里每个顶部菜单的ICO图标不是动态的...HorizontalAlignment="Center" Width="160" /> ListBox...> ListBox> ListBoxItem" x:Key="ListBoxItemStyleNew" > ListBoxItem
例如 ListBox -> ListBoxItem ComboBox -> ComboBoxItem ListBoxItem变量的Path为Binding ?...Binding()); 6.3.9 使用XML数据作为Binding的源 XML文本是树形结构,可以方便表示线性集合(Array、List等)和树形结构数据 当使用XML作为源时,路径使用XPath而不是...6.3.10 使用Linq检索结果作为Binding的源 使用Linq我们可以方便地操作集合、DataTable和XML对象而不必动辄好几层foreach循环嵌套只是为了完成一个简单的任务 Linq...") { Source = odp, BindsDirectlyToSource = true, //把UI接收到的数据写入其直接Source(即ObjectDataProvider)而不是
一旦加入真实的验证逻辑,甚至可以忽略IDataErrorInfo的存在。 INotifyDataErrorInfo的常规定义 我将分两次讨论INotifyDataErrorInfo接口。...INotifyDataErrorInfo接口旨在支持Silverlight 4中的异步验证,其基本想法是修改属性会触发服务调用,被调用的服务最终会结束并更新错误状态。...不过,如果你尝试单击“保存”按钮同步检查验证状态,那这就不是一个好办法。 此外,ErrorsChanged理论上可以触发两次:一次是立即触发,另一次是异步验证完成后触发。...它返回的是IEnumerable而不是IEnumerable,这让它看起来就像是一个C# 1的接口,而不是泛型。...但在涉及集合属性时,这可能有点蹊跷,最好是将其封装在类中,而不是尝试构建临时解决方案。 可编辑的对象 与IChangeTracking不同,IEditableObject专门用于UI场景中。
Prism 是一个有10年以上历史的框架,而上个月才刚发布了它的 8.0 版本,这意味着现在网上能找到的大部分 Prism 的资料都已经有点过时,连 官方文档 也不例外。...不是 6 分钟,不是 16 分账,是整整 60 分钟,Prism 的旧文档随便打开一篇都吓死人。而 Prism 的各种包更是多到离谱。...除了 INotifyPropertyChanged,绑定机制中另一个十分有用的接口是 INotifyDataErrorInfo,它用于公开数据验证的结果。...Prism 提供了 ErrorsContainer 以便管理及通知数据验证的错误信息。...Event Aggregator 本来Event Aggregator(事件聚合器)或 Messenger 之类的组件本来并不是 MVVM 的一部分,不过现在也成了 MVVM 框架的一个重要元素。
虽说 WPF 支持不错,但我还是有几点需要说明一下: 这里我说的是“UI 自动化”,而不是“UI 自动化测试”;前者比后者范围更广泛,因为前者除了能用来做 UI 自动化测试之外,还能同时应用于读屏软件,...然而,实际情况却并不是这样…… 哪些情况会破坏 WPF 的 UI 自动化 很多时候,我们在写代码时,可能太过于关注最终做成了什么样子,而忽略了控件原本的层次结构和属性含义,这就可能导致我们的程序暴露给...尽量保留 WPF 自带的 UI 自动化机制,避免对样式和模板做过于复杂的定制,如果要做,则尽可能使用现成常用的属性,而不是自己定义新属性(例如用好 Content 而不是定义一个新的 TitleText...尽量使用通用控件来做控件对应的交互(例如像一个按钮那就用按钮,像一个组合框那就用组合框),而不是使用 Grid、Border 等用来布局或装饰的控件来随意处理。...; } } 给一个几乎都是图像组成的 ListBox 的 UI 自动化适配例子。
很多界面元素都实现了这个接口,其中包括Button,ListBoxItem,MenuItem等。 命令目标(Command Target):即命令发送给谁,或者说命令作用在谁的身上。...还需要注意,各种控件发送命令的方法不经相同,比如Button和MenuButton在单击时发送命令,而ListBoxItem单击时表示被选中,双击的时候才发送命令。...第二,RountedCommand是一个与业务逻辑无关的类,只负责在程序中跑腿而并不对命令目标进行操作,TextBox并不是由它清空的。那么TextBox的情况操作是谁呢?... Grid.Row="6" x:Name="lbInfos"> ListBox> 不是由命令来决定的,而是由外围的CommandBinding捕获到命令目标受命令激发而发送的路由事件后在其Executed事件处理器中完成的
指定文本框内容以何种样式的字符显示,比如密码可以将值设为 show="*" textvariable 输入框内值,也称动态字符串,使用 StringVar() 对象来设置,而...对应着什么时候验证,比如focus是当Entry获得或失去焦点的时候验证,key是当输入框被编辑的时候验证 validatecommand 指定用户自定义的验证函数,该函数只能返回 True 或者 Fasle...控件,关联滚动条 listbox = tk.Listbox(window,selectmode=tk.SINGLE,yscrollcommand=scrollbar.set,height=5) # 向Listbox...中添加元素/也可以通过设定一个元组,使用enumerate()函数来进行遍历 listbox.insert(1, "apple") listbox.insert(2, "banana") listbox.insert...(3, "orange") listbox.insert(4, "grape") listbox.insert(5, "pear") listbox.insert(6, "watermelon") #
而花较大精力做这件事的原因,主要是因为: 业务中需要支持一系列新功能:整行编辑、上下箭头键进行导航、合计行、锁定列 等。 控件显示性能较差,需要支持列虚拟化。...而每个可视树元素的测量、布局等行为,则是依赖于元素本身的数据,通过元素本身的算法决定。 ...而经常做这些可空性检测的原因是,WPF 控件的设计要求,各控件互相之间没有必然的联系。控件的设计者不会知道该控件会被上层开发人员把它放在哪个控件里。...例如,ListBoxItem 并不一定要放在 ListBox 中才能显示。所以,在开发自定义控件时,尽量不要把控件的可视树关系要求得过于严格。当没有指定的可视树关系时,也不应该抛出异常。...而 ApplyTemplate 方法内部则会通过一个 bool 类型的状态值来检测是否已经应用过模板,以防止重入。
关于ListBox ListBox是WinForm中的 列表 控件,它提供了一个项目列表(一组数据项),用户可以选择一个或者多个条目,当列表项目过多时,ListBox会自动添加滚动条,使用户可以滚动查阅所有选项...注意,获取到的是列表选中项的文本内容,而SelectedIndex和SelectedIndeces获取的只是选中项索引(int)。....Items.Remove("在此放入你要移除条目的文本内容"); //删除是用的是文本内容,而不是索引 listBox1.Items.Clear();...因为ListBox的删除要通过指定某项的文本,并且只能一项项的删除,而删除一项后索引又会发生变化,所以新手可能会很惘然。下面提供两种删除方式的代码供新手参考。....SelectedItems.Count-1; i >=0; i--) { //亦是从后删除 listBox1.Items.Remove(listBox1.Items[listBox1
领取专属 10元无门槛券
手把手带您无忧上云