我有一個自定義行爲附加到組合框控件。突出顯示組合框中的第一個項目時未選擇
在我想要的行爲中,默認情況下,突出顯示實現增量搜索的組合框的第一項。我的意思是結果呈現在彈出框中的第一項應突出顯示但未選中。
這意味着我不能使用SelectedIndex = 0
,因爲它也會選擇該項目。我想保持ComboBox爲空,但將項目的視覺狀態設置爲突出顯示。
我看到有一個IsHighlightedProperty
ComboBoxItem
但這是註冊爲只讀dp所以沒有幫助。
有反正我可以做到這一點嗎?
我有一個自定義行爲附加到組合框控件。突出顯示組合框中的第一個項目時未選擇
在我想要的行爲中,默認情況下,突出顯示實現增量搜索的組合框的第一項。我的意思是結果呈現在彈出框中的第一項應突出顯示但未選中。
這意味着我不能使用SelectedIndex = 0
,因爲它也會選擇該項目。我想保持ComboBox爲空,但將項目的視覺狀態設置爲突出顯示。
我看到有一個IsHighlightedProperty
ComboBoxItem
但這是註冊爲只讀dp所以沒有幫助。
有反正我可以做到這一點嗎?
您的項目清單應該是某種ItemsControl
(即ComboBox
,ListBox
,ListView
,TreeView
等)嗎?
因此,必須對自己的財產ItemTemplate
...
所以在這ItemTemplate
添加將有 MultiBinding
兩個特性DataTrigger
......
{Binding}
{Binding ItemsSource, RelativeSource={RelativeSource AncetsrType={x:Type ItemsControl}}}
的MultiBinding.Converter
將返回true,如果
values[0] == ((IEnumerable)values[1]).Cast<object>().First()
然後在此基礎上國旗在DataTrigger
你可以申請要在列表中是第一個項目無論款式!
希望這會有所幫助。
我可能不想設置樣式,但想要設置突出顯示的組合框,並且應該使用現有樣式進行突出顯示。 – gaurawerma 2012-08-08 13:26:04
除了使用轉換器,您還可以使用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
將使用現有的高亮風格,而不是自定義顏色。
我需要從行爲中做到這一點。我不想修改現有的控件。 – gaurawerma 2012-08-08 13:51:21
你能更明確地突出顯示嗎?我們正在說'[突出顯示[v]]'還是保持組合空白,但更改第一個項目的顏色以突出顯示? – 2012-08-08 12:25:32
當然,我想保留組合框爲空,但將第一個項目的顏色更改爲突出顯示。 – gaurawerma 2012-08-08 12:32:38