Как я могу изменить цвет выделенного текста в WPF ComboBox? - PullRequest
2 голосов
/ 13 мая 2011

В моем приложении я определил следующий стиль для TextBlocks.

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="FontFamily" Value="Arial"/>
    <Setter Property="FontSize" Value="11"/>
    <Setter Property="Foreground" Value="{StaticResource TextBrush}"/>
    <Setter Property="Opacity" Value="1.0"/>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Opacity" Value="0.40"/>
        </Trigger>
    </Style.Triggers>
</Style>

Стиль намеренно определен на самом высоком уровне моего приложения, так что он по умолчанию применяется ко всем TextBlocks.

Проблема в том, что этот стиль нарушает поведение TextBlocks в ComboBoxes.Обычно выбранный элемент в ComboBox меняет цвет переднего плана на белый.Однако при применении этого стиля цвет текста на переднем плане не изменяется.

Как я могу вызвать изменение цвета текста при выделении текстового блока в поле со списком?

Ответы [ 4 ]

2 голосов
/ 16 мая 2011

Если вы просто хотите изменить передний план текстового блока для выбранного элемента (скажем, красного), просто добавьте это к своим ресурсам стиля:

<Style.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red"/>
</Style.Resources>
1 голос
/ 17 мая 2011

Я решил эту проблему, переместив стили из app.xaml в отдельный словарь ресурсов, который я при необходимости включаю в окно приложения и страницы.

Это не позволяет стилю TextBlock влиять на цвет текста в ComboBox. Наконец, чтобы добиться нужного цвета текста для всех элементов, я заменил следующие системные цвета по умолчанию своими собственными.

<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}"
                 Color="{StaticResource TextColor}"/>

<SolidColorBrush x:Key="{x:Static SystemColors.WindowTextBrushKey}"
                 Color="{StaticResource TextColor}"/>
0 голосов
/ 16 мая 2011

Вы можете добавить второй стиль на основе вашего первого и сбросить свойство фона.

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" Value="{StaticResource TextBrush}"/>
</Style>

<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource {x:Type TextBlock}}" x:Key="ResetBG">
    <Setter Property="Foreground" Value="{Binding Control.Background}"/>
</Style>

<TextBlock Text="Red"/>
<TextBlock Text="Default" Style="{StaticResource ResourceKey=ResetBG}"/>
0 голосов
/ 13 мая 2011

Вы пытались добавить другой стиль текста в ComboBox.Resources или, возможно, элемент управления, который охватывает ваш ComboBox? Это переопределит стиль, который вы установили на более высоком уровне.

Еще один способ сделать это - просмотреть визуальное дерево вашего ComboBox при загрузке и удалить стиль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...