2012-08-08 59 views
0

我有一個自定義行爲附加到組合框控件。突出顯示組合框中的第一個項目時未選擇

在我想要的行爲中,默認情況下,突出顯示實現增量搜索的組合框的第一項。我的意思是結果呈現在彈出框中的第一項應突出顯示但未選中。

這意味着我不能使用SelectedIndex = 0,因爲它也會選擇該項目。我想保持ComboBox爲空,但將項目的視覺狀態設置爲突出顯示。

我看到有一個IsHighlightedPropertyComboBoxItem但這是註冊爲只讀dp所以沒有幫助。

有反正我可以做到這一點嗎?

+0

你能更明確地突出顯示嗎?我們正在說'[突出顯示[v]]'還是保持組合空白,但更改第一個項目的顏色以突出顯示? – 2012-08-08 12:25:32

+0

當然,我想保留組合框爲空,但將第一個項目的顏色更改爲突出顯示。 – gaurawerma 2012-08-08 12:32:38

回答

0

您的項目清單應該是某種ItemsControl(即ComboBoxListBoxListViewTreeView等)嗎?

因此,必須對自己的財產ItemTemplate ...

所以在這ItemTemplate 添加將有 MultiBinding兩個特性DataTrigger ......

  1. 當前的數據上下文的清單項目... {Binding}
  2. 該清單的ItemsSource ... {Binding ItemsSource, RelativeSource={RelativeSource AncetsrType={x:Type ItemsControl}}}

MultiBinding.Converter將返回true,如果

values[0] == ((IEnumerable)values[1]).Cast<object>().First() 

然後在此基礎上國旗在DataTrigger你可以申請要在列表中是第一個項目無論款式!

希望這會有所幫助。

+0

我可能不想設置樣式,但想要設置突出顯示的組合框,並且應該使用現有樣式進行突出顯示。 – gaurawerma 2012-08-08 13:26:04

1

除了使用轉換器,您還可以使用ComboBox的AlternationIndex屬性獲取項目的索引,然後使用觸發器爲第一個顏色着色。交替指數設置的東西,總是會比項目的ComboBox中數量較大,使得只有一個項目將都爲0的風格指數來選擇項目會是這樣的:

<Style x:Key="FirstColor" TargetType="{x:Type ListBoxItem}"> 
     <Style.Triggers> 
      <Trigger Property="ComboBox.AlternationIndex" Value="0"> 
       <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
      </Trigger> 
     </Style.Triggers>    
    </Style> 

而且你的組合框會是這個樣子:

<ComboBox ItemsSource="{Binding Items}" SelectedIndex="-1" 
      AlternationCount="500" 
      ItemContainerStyle="{StaticResource FirstColor}"/> 

HighlightBrushKey將使用現有的高亮風格,而不是自定義顏色。

+0

我需要從行爲中做到這一點。我不想修改現有的控件。 – gaurawerma 2012-08-08 13:51:21

相關問題