2009-10-09 60 views
1

我正在寻找一些ComboBox和ListView的混合,我想知道为什么没有像这样的东西,尽管我觉得这是一个非常自然的愿望。多列选择器

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

  1. 显示这三个属性很好地对齐列在某些组合框状的下拉
  2. 提供的通过直接键入文本到一个单一的文本框,快速找到一个项目某种方式(不指定,哪些财产将被搜查)。这应该选择第一个匹配项或过滤隐藏所有不匹配的项目。

关键是控制是完全可用的没有鼠标,但也提供了一些“资源管理器” -mode,如果用户不记得完美标识ID,但一些描述或名称唯一零件。 一个可配置的“搜索功能”将会很好,如果您需要明确指出要包含在搜索或显示功能中的所有属性,则不会有任何问题。

回答

2

有没有这样的控制,到目前为止,但你一定可以让一个轻松,

创建一个C#自定义控件并定义控制模板包含一个DataGrid/ListView的扩展。

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

替代方案:

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

<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属性,以便能够通过keyboad选择项目。

+0

听起来不错,的确如此。从扩展器开始使它比试图说服ComboBox做我想做的事更容易。 当然,我希望某些社区准备好使用并进行测试,但也许我会尝试自行创建。 – 2009-10-10 14:46:29

+0

呃......我试过了,但很快就认识到这样我就不得不重新实现所有那些漂亮的ComboBox-Features。 我猜想将一个ComboBox与一些事件触发的帮助器一起包装起来会更容易,并且最终可以满足我的需求。 – 2009-10-14 19:22:44

+0

我只是使用itemtemplate添加了一个替代答案。 – 2009-10-14 19:45:56