2011-04-29 119 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

相关问题