【问题标题】:ComboBoxItem highlight color Windows8ComboBoxItem 高亮颜色 Windows8
【发布时间】:2014-01-09 09:19:26
【问题描述】:

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

【问题讨论】:

    标签: wpf xaml windows-8 combobox controltemplate


    【解决方案1】:

    抱歉,windows 8 RT xaml 不支持 Triggers..您上传的代码必须是 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>
    

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

    【讨论】:

    • 您说Windows 8 xaml 不支持触​​发器。让我们明确这一点,因为这是不正确的......只有 Windows 8 RT 不支持触​​发器。
    • 感谢更新...我认为这次没有必要投反对票。
    【解决方案2】:

    我还没有使用它,但我相信在 Window 8 中,您可以通过简单地覆盖这个新的 Brush 来满足您的要求,就像您对旧的 SystemColors.HighlightBrushKey 所做的那样:

    <SolidColorBrush x:Key="ComboBoxItemSelectedBackgroundThemeBrush" Color="Orange" />
    

    这还取决于您使用的是深色主题还是浅色主题,但您可以在 MSDN 上的 ComboBoxItem styles and templates 页面中找到这些新 Brushes 的完整列表。

    【讨论】:

    • 我只需要添加它?
    • 没有用吗?你知道,我刚刚对这个主题进行了很好的搜索,但令人惊讶的是,这方面的信息很少。这些新的Brushes 使用新的ThemeResource markup extension 声明,此链接页面提供了有关它们的详细信息,但没有有关更新值的信息。基本上,Windows 8.1 UI 控件都使用这些ThemeResources,所以理论上,如果您在本地范围内定义具有相同x:Key 值的新Brushes,那么使用该资源的任何UI 控件都应该使用新值也是。
    • 在我看来,不发表评论就投反对票的人是愚蠢的……这样做毫无意义,因为他们没有任何意义。愿意解释你的反对票之谜吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2015-01-31
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多