ComboBoxItem突出显示颜色Windows8

时间:2014-01-09 09:19:27

标签: wpf xaml windows-8 combobox controltemplate

我有这段代码用鼠标悬停设置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。如何制作?

2 个答案:

答案 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>

并且不需要在组合框的资源中存储颜色。您可以直接将颜色应用于背景和边框。我节省了资源,因为你节省了资源