如何在ComboBox中设置ContentPresenter的样式?

时间:2013-11-21 12:43:09

标签: c# wpf xaml combobox styles

我目前正在设计ComboBox看起来像Visual Studio中的那个(以及颜色主题)。我已经完成了大部分样式,但在显示当前所选对象的ContentPresenter停了下来。

XAML的内容如下所示:

<ContentPresenter Margin="2" IsHitTestVisible="False" VerticalAlignment="Center" HorizontalAlignment="Stretch"
                  Name="ContentSite"
                  ContentTemplate="{TemplateBinding ComboBox.SelectionBoxItemTemplate}"
                  Content="{TemplateBinding ComboBox.SelectionBoxItem}" />

问题是,默认SelectionBoxItemTemplate似乎忽略了ComboBox的前景值:

<ComboBox Margin="4" SelectedIndex="0" Foreground="Red">
    <ComboBoxItem>First</ComboBoxItem>
    <ComboBoxItem>Second</ComboBoxItem>
    <ComboBoxItem>Third</ComboBoxItem>                
</ComboBox>

enter image description here

第一个是不可编辑的,SelectionBoxItemTemplate启动并强制将文本的颜色设置为黑色(即使Foreground手动设置为红色,而风格设置为另一种非黑色)。

如何将当前前景色传递给ContentPresenter?如果我不能,我在哪里可以找到SelectionBoxItemTemplate的工作替代品? (就ComboBox

中的所有项目类型而言,它可以正常工作

1 个答案:

答案 0 :(得分:0)

我认为它确实忽略了Foreground颜色。如果您将以下(正常)ComboBox控件添加到XAML ......:

<ComboBox Foreground="Red">
    <ComboBoxItem>One</ComboBoxItem>
    <ComboBoxItem>Two</ComboBoxItem>
    <ComboBoxItem>Three</ComboBoxItem>
    <ComboBoxItem>Four</ComboBoxItem>
</ComboBox>

...您会看到设置Foreground 会更改所选的项目文字。我想也许你的问题在于你的 ControlTemplate。现在我不能百分百肯定,但我认为你的ContentPresenter应该是这样的:

<ContentPresenter Margin="2" IsHitTestVisible="False" VerticalAlignment="Center" 
    HorizontalAlignment="Stretch" Name="ContentSite" ContentTemplate="{TemplateBinding 
    SelectionBoxItemTemplate}" Content="{TemplateBinding SelectionBoxItem}" />