我有这段代码用鼠标悬停设置ComboBoxItem
的背景。
<ComboBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Orange"/>
</ComboBox.Resources>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="Orange" />
<Setter Property="BorderThickness" Value="2" />
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
在Win Vista,Win 7中没问题,但在Win8上没有。我读到他们改变了aero中的框架,我必须使用controltemplate。如何制作?
答案 0 :(得分:0)
我还没有使用它,但我相信在Window 8中,您可以通过简单地覆盖新Brush
来满足您的要求,就像使用旧的SystemColors.HighlightBrushKey
一样:
<SolidColorBrush x:Key="ComboBoxItemSelectedBackgroundThemeBrush" Color="Orange" />
这还取决于您使用的是暗色还是浅色主题,但您可以在MSDN的ComboBoxItem styles and templates页面中找到这些新Brush
es的完整列表。
答案 1 :(得分:0)
抱歉,Windows 8 RT xaml不支持触发器。您上传的代码必须是Wpf xaml ..您可以更改下面的组合框样式
<ComboBox Height="20" Width="200">
<ComboBox.Resources>
<SolidColorBrush x:Key="OrangeColor" Color="Orange"/>
<SolidColorBrush x:Key="OpacityOrangeColor" Color="Orange" Opacity="0.5"/>
</ComboBox.Resources>
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Grid>
<Border x:Name="Border" Background="Transparent"/>
<ContentPresenter></ContentPresenter>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="ComboBoxItem.IsMouseOver" Value="True">
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource OrangeColor}" />
<Setter TargetName="Border" Property="BorderThickness" Value="2" />
<Setter TargetName="Border" Property="Background" Value="{StaticResource OpacityOrangeColor}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
<ComboBoxItem>xcvxvxc</ComboBoxItem>
<ComboBoxItem>sdfdsfsd</ComboBoxItem>
</ComboBox>
并且不需要在组合框的资源中存储颜色。您可以直接将颜色应用于背景和边框。我节省了资源,因为你节省了资源