Вложенные стили WPF

У меня есть 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, все остальное изменится просто отлично, но когда я верну стиль, каждый передний план станет белым.


person Sam_vdd    schedule 13.12.2012    source источник
comment
У меня работает... не могли бы вы опубликовать весь код xaml или хотя бы соответствующие части?   -  person Florian Gl    schedule 13.12.2012
comment
Я знаю, что это старый вопрос, но я думаю, что он не работает, потому что шаблон для ComboBox содержит TextBox, стиль которого определяется вашим глобальным стилем. Я думаю, что ответ Кека сработает, если вы уберете глобальный стиль.   -  person HiredMind    schedule 07.09.2013


Ответы (2)


Чтобы вложить стили, вы можете включить их в ресурсы родителя. Вы также можете изменить свойство TextBlock.Foreground стиля Combobox.

<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>
person Kek    schedule 13.12.2012

Попробуйте установить стиль для 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>
person Johan Larsson    schedule 13.12.2012
comment
Когда я меняю цвет фона элемента со списком, он работает, но передний план не меняется. - person Sam_vdd; 13.12.2012
comment
Это странно, я вижу инвертированные цвета, когда пробую это здесь. Вы уверены, что ссылаетесь на стиль в ResourceDictionary, а не на локальный стиль? - person Johan Larsson; 13.12.2012
comment
Да, потому что, если я удалю стиль для текстового блока, свойства изменятся правильно. - person Sam_vdd; 13.12.2012