2009-10-09 97 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