最近在写一个WPF客户端的一个小程序,其中有个小需求如下:
- 展示下拉列表里面有树形结构
- 点击下拉子项时同时显示父级和子级文本
也就是说在DisplayMember 中有两种显示方式
- 下拉列表显示时,显示的是DisplayMember 的值
- 点击选中子项时,需要计算子级和父级的文本并进行拼接,然后显示在combox 中
操作步骤:
- 使用Textbox做高宽统一放置在Combox的上方,漏出下拉框的下拉箭头,把Textbox做成透明层(这里不是界面透明,是事件穿透哦),把Combox 与Textbox 分组为一组Gird中 做好高宽自动同步拉伸
<Grid Margin="62,4,220,33">
<ComboBox x:Name="cmbCategoryAdd1"/>
<TextBox IsReadOnly="True" x:Name="txtcmbCategoryAdd1" Text="" Margin="0,0,18,0"/>
</Grid>
效果如下:
- 现在要把Textbox 做成透明层
TextBox text = window.GetControlByName<TextBox>("txt" + comboBox.Name);
text.Text = comboBox.GetComboxSelectedValue();
text.IsHitTestVisible = false;//设置文本框为透明层
代码里的window就是当前窗口(this),GetControlByName 也贴出来
/// <summary>
/// 根据控件名称,查找控件
/// </summary>
public static T GetControlByName<T>(this Window obj, string elementName) where T : FrameworkElement
{
return ((T)obj.FindName(elementName));
}