Windows8中的WPF ComboBox自定义

时间:2012-10-03 09:56:04

标签: wpf windows combobox customization

我正在尝试在windows8上自定义WPF ComboBox控件。但是看起来在win8上这些定制对ComboBox没有任何影响,组合框具有默认的外观。

e.g

< ComboBox Height="20" HorizontalAlignment="Left" Background="Red" BorderThickness="1" Name="comboBox1" VerticalAlignment="Top" Width="200" />

这里我为组合框分配红色背景,但在win8上没有任何效果。

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您可能需要“编辑其他模板”以完全控制Combobox。 可以通过右键单击XAML中的组合框(DesignView)(假设您正在使用C#和XAML)并转到“编辑其他模板”然后转到“编辑生成的项目容器”然后转到“编辑副本”来完成。 这将在“StandardStyles.xml”中创建一个样式(默认情况下),然后您可以随意修改。 为我工作。 希望它也适合你。

在样式中,查找视觉状态并更改背景颜色

                            <VisualState x:Name="Selected">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="InnerGrid">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="#333333"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListBoxItemSelectedForegroundThemeBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="SelectedUnfocused">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="InnerGrid">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="#333333"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListBoxItemSelectedForegroundThemeBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="SelectedDisabled">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="InnerGrid">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="#333333"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListBoxItemSelectedDisabledForegroundThemeBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="SelectedPointerOver">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="InnerGrid">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="#333333"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListBoxItemSelectedForegroundThemeBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="SelectedPressed">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="InnerGrid">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="#333333"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListBoxItemSelectedForegroundThemeBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>

#333333是我给它的值。你可以在这里指定“红色”。 应该工作。

答案 1 :(得分:0)

我按照Suny的建议,仍然无法获得红色背景,因此我在Popup中将Background更改为Red,这帮助我获得了Red。