如何使用WPF突出显示组合框中的项目?
问题描述:
我有一个用对象列表填充的组合框。我喜欢根据对象的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提前
答
这应该做工精细用一个简单的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触发器应该刷新。
答
你可能会想重新定义了HighlightBrushKey
,覆盖默认高亮风格:
<ComboBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="FFAAF3A0" />
</ComboBox.Resources>
应该为你做的伎俩。
(如果是比较一般,把它直接在UserControl.Resources
/Window.Resources
)
当我悬停物品时,您的解决方案正在更改高亮颜色。我想设置一个项目来突出显示。 (我是否悬停在上面)我必须能够使用对象(项目)的属性标记该项目。 – VDP 2011-04-29 15:32:18
杜。不匹配的关键,与'ControlBrushKey'混合应该做的伎俩 – Damascus 2011-04-29 16:27:02