WPF嵌套样式

6
我有一个应用程序中的TextBlocks和Comboboxes,我希望Textblock前景色为白色,Combobox前景色为黑色。
我的尝试是:
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" Value="White" />
</Style>
<Style TargetType="{x:Type ComboBox}">
    <Setter Property="Foreground" Value="Red" />
</Style>
</ResourceDictionary>



<Grid Background="Black">
    <TextBlock Height="23" HorizontalAlignment="Left" Margin="27,30,0,0" Name="textBlock1" Text="TextBlock" VerticalAlignment="Top" />
    <ComboBox Height="23" HorizontalAlignment="Left" Margin="12,99,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" />
</Grid>

但下拉框的前景仍然是白色,如何覆盖 TextBlock 的前景呢?(在 CSS 中这很容易,但在 WPF 中不知道怎么做)

如果我移除 TextBlock 的样式,其他所有东西都会正常更改,但当我重新应用样式时,所有前景都变成了白色。


可以,这对我有效...你能发布整个XAML代码或者至少是相关部分吗? - Florian Gl
1
我知道这是一个老问题,但我认为它不起作用是因为ComboBox的模板包含一个TextBox,而该TextBox正在被全局样式进行样式设置。如果您将全局样式移除,我认为Kek的答案将会起作用。 - HiredMind
2个回答

17

要嵌套样式,您可以将它们包含在父级资源中。您还可以更改ComboBox样式的TextBlock.Foreground属性。

<Style TargetType="{x:Type ComboBox}">
    <Style.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Foreground" Value="Black" />
        </Style>
    </Style.Resources>
    <Setter Property="Foreground" Value="Black" />
    <Setter Property="textBlock.Foreground" Value="Black" />
</Style>

1
尝试为ComboBoxItem设置样式。
<Style TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="Background" Value="Black"/>
</Style>
<Style TargetType="{x:Type ComboBoxItem}">
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="Background" Value="Black"/>
</Style>
<Style TargetType="{x:Type ComboBox}">
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="Background" Value="Black"/>
</Style>

当我更改组合框项目的背景颜色时,它可以正常工作,但前景色没有改变。 - Sam_vdd
很奇怪,我在这里尝试时看到了颜色反转。你确定你引用的是ResourceDictionary中的样式而不是本地样式吗? - Johan Larsson
是的,因为如果我删除Textblock的样式,属性就会正确修改。 - Sam_vdd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接