多列选择器

时间:2009-10-09 18:11:19

标签: c# .net wpf .net-3.5 user-controls

我正在寻找ComboBox和ListView的混合体,我想知道为什么没有这样的东西,虽然我觉得这是一个很自然的愿望。

更详细: WPF ItemsControl应具有所有适用项的ItemsSource。 这些项具有多个属性,例如ID:int,Name:string和Description:string。 现在我的ItemControl应该:

  1. 在一些类似组合框的下拉列表中将这三个属性显示为精确对齐的列
  2. 通过在单个文本框中键入文本提供一些快速查找项目的方法(不指定,应搜索哪个属性)。这应该选择第一个匹配或过滤隐藏所有不匹配的项目。
  3. 关键是控件在没有鼠标的情况下完全可用,但如果用户不记得完美识别的ID但只记住某些描述或名称的一部分,则还提供一些“资源管理器”模式。 可配置的“搜索功能”会很好,如果你需要明确说明要包含在搜索或显示功能中的所有属性,那就不会有问题。

1 个答案:

答案 0 :(得分:2)

到目前为止还没有这样的控制,但你当然可以轻松制作一个,

创建一个C#Custom Control并将控件模板定义为包含DataGrid / ListView的Expander。

您可以根据ListView的需要定义自定义控件的依赖项属性,并为它们执行模板绑定。扩展器的标题应绑定到所选项目的文本或对象的某种文本表示。

替代:

在项目模板中添加GRID并定义其列定义。您可以轻松地在GRID中指定多列值。

<ComboBox>
   <ComboBox.ItemTemplate>
       <DataTemplate>
           <Grid>
                <Grid.ColumnDefinitions>
                     <ColumnDefinition Width="100"/>
                     <ColumnDefinition Width="200"/>
                     <ColumnDefinition Width="100"/>
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding CustomerName}"/>
                <TextBlock Grid.Column="1" Text="{Binding CustomerEmail}"/>
                <TextBlock Grid.Column="2" Text="{Binding CustomerPhone}"/>
           </Grid>
       </DataTemplate>
   </ComboBox.ItemTemplate>
</ComboBox>

通过正确应用宽度并为文本块添加边距,您可以创建多列列表以便轻松显示。不要忘记TextSearch.SearchPath属性,以便能够通过键盘选择项目。