福州网站建设软件,天猫网站设计特点,360收录查询,济南网站seo外包最近在写一个WPF客户端的一个小程序#xff0c;其中有个小需求如下#xff1a; 展示下拉列表里面有树形结构点击下拉子项时同时显示父级和子级文本也就是说在DisplayMember 中有两种显示方式 下拉列表显示时#xff0c;显示的是DisplayMember 的值点击选中子项时#xff0c… 最近在写一个WPF客户端的一个小程序其中有个小需求如下 展示下拉列表里面有树形结构点击下拉子项时同时显示父级和子级文本也就是说在DisplayMember 中有两种显示方式 下拉列表显示时显示的是DisplayMember 的值点击选中子项时需要计算子级和父级的文本并进行拼接然后显示在combox 中一开始没有多想就想应该直接设置combox.Text 不就可以搞定了么问题很简单的嘛于是就设置了下 发现不起作用最后查了msdn 说是combox 的 IsEditabletrue 时 设置下拉框的Text才有效于是就启用了IsEditable运行调试发现仍然没有卵用 问题来了怎么搞那换个思路重写Combox ? 我觉得太麻烦就没有往这方面想毕竟界面用的没有几个下拉框。那有没有什么先简单的方式呢 我的思路 使用Textbox做高宽统一放置在Combox的上方漏出下拉框的下拉箭头把Textbox做成透明层这里不是界面透明是事件穿透哦把Combox 与Textbox 分组为一组Gird中 做好高宽自动同步拉伸注意在控件命名的时候最好有规律哦后面要用到的。 xaml如下 Grid Margin62,4,220,33ComboBox x:NamecmbCategoryAdd1/TextBox IsReadOnlyTrue x:NametxtcmbCategoryAdd1 Text Margin0,0,18,0//Grid 显示如下 选择 未选择 有没有感觉很逼真其实上方是Textbox,好吧现在要把Textbox 做成透明层代码如下 TextBox text window.GetControlByNameTextBox(txt comboBox.Name);text.Text comboBox.GetComboxSelectedValue();text.IsHitTestVisible false;//设置文本框为透明层 这就把Textbox 设置为透明层啦下面来做下拉框选中以后改变Textbox 的值 //下拉框选择变化时发生comboBox.SelectionChangednew SelectionChangedEventHandler((sender, args) {TextBox text2 window.GetControlByNameTextBox(txt comboBox.Name);text2.Text comboBox.GetComboxSelectedValue();}); 代码里的window就是当前窗口thisGetControlByName 也贴出来 #region 根据控件名称查找控件/// summary/// 根据控件名称查找控件/// /summarypublic static T GetControlByNameT(this Window obj, string elementName) where T : FrameworkElement{return ((T)obj.FindName(elementName));}#endregion 现在查看下效果 嗯不错效果还是很满意的没有重写Combox,这样放置个透明Textbox 简单两句代码就可以实现啦。小东西目的是为了培养自己写博客的习惯。 转载于:https://www.cnblogs.com/nodes/p/8681969.html