2011-04-29 99 views
1

我有一個用對象列表填充的組合框。我喜歡根據對象的IsHighlighted屬性突出顯示組合框中的項目。如何使用WPF突出顯示組合框中的項目?

我試着寫我自己的風格,但沒有真正的成功...

<Style x:Key="SimpleComboBoxItem" TargetType="ComboBoxItem"> 
     <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ComboBoxItem"> 
        <Border Name="Border" Padding="2" SnapsToDevicePixels="true"> 
         <ContentPresenter x:Name="contentPresenter" /> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="true"> 
          <Setter TargetName="Border" Property="Background" Value="#FFCCCCCC"/> 
         </Trigger> 
         <Trigger Property="Tag" Value="Highlight" SourceName="contentPresenter"> 
          <Setter Property="Background" TargetName="Border" Value="#FFAAF3A0"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Thanx提前

回答

3

這應該做工精細用一個簡單的DataTrigger。

你的對象類:

public class TestObject 
{ 
    public string Name { get; set; } 

    public bool IsHighlighted { get; set; } 

    public override string ToString() 
    { 
     return this.Name; 
    } 
} 

的XAML:

<Window x:Class="TestWPF.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:TestWPF" 
     Title="MainWindow"> 
    <Grid> 
     <StackPanel> 
      <ComboBox> 
      <ComboBox.Resources> 
       <Style TargetType="ComboBoxItem"> 
        <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
        <Setter Property="Background" Value="Gray" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding IsHighlighted}" Value="True"> 
          <Setter Property="Background" Value="Red" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </ComboBox.Resources> 
       <local:Employee Name="Nick" /> 
       <local:Employee Name="Bob" IsHighlighted="True" /> 
       <local:Employee Name="Fred" /> 
      </ComboBox> 
     </StackPanel> 
    </Grid> 
</Window> 

注:以上不同的樣品,我猜在你的代碼要綁定組合框的ItemsSource時...這應該工作也一樣。但要注意的一件事是,如果對象的「IsHighlighted」屬性可以更改,則應該實施INotifyProperty更改,以確保更改該值將通知UI觸發器應該刷新。

0

你可能會想重新定義了HighlightBrushKey,覆蓋默認高亮風格:

<ComboBox.Resources> 

    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="FFAAF3A0" /> 

</ComboBox.Resources> 

應該爲你做的伎倆。

(如果是比較一般,把它直接在UserControl.Resources/Window.Resources

+0

當我懸停物品時,您的解決方案正在更改高亮顏色。我想設置一個項目來突出顯示。 (我是否懸停在上面)我必須能夠使用對象(項目)的屬性標記該項目。 – VDP 2011-04-29 15:32:18

+0

杜。不匹配的關鍵,與'ControlBrushKey'混合應該做的伎倆 – Damascus 2011-04-29 16:27:02

相關問題