Как мне переопределить отключенный цвет группового поля WPF (т. Е. серый) для его заголовка?

#wpf #xaml

#wpf #xaml

Вопрос:

Я последовал совету предыдущих ответов для настройки глобального стиля группового поля, который включает в себя HeaderTemplate. Этот стиль отлично работает, когда затронутые объекты GroupBox включены. Когда затронутые объекты GroupBox отключены, я могу изменить только цвет границы. Я не хочу серый цвет по умолчанию, когда объекты GroupBox отключены. Мой стиль группового поля показан ниже:

     <!-- This is the color brush I am trying to set on the header text -->
    <SolidColorBrush x:Key="moDisabledFGColor" Color="DarkBlue" Opacity="0.5" />

    <Style TargetType="{x:Type GroupBox}">
        <Setter Property="BorderThickness" Value="2" />
        <Setter Property="BorderBrush" Value="{StaticResource moFGColor}"/>
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="Foreground" Value="{StaticResource moFGColor}" />
        <Setter Property="HeaderTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock x:Name="HeaderText" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}, Path=Header}" FontWeight="Bold"
                                Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupBox}}, Path=Foreground}" />
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}}" Value="False">
                            <Setter TargetName="HeaderText" Property="Foreground" Value="{StaticResource moDisabledFGColor}"/>
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="BorderBrush" Value="{StaticResource moDisabledFGColor}" />
                <Setter Property="Foreground" Value="{StaticResource moDisabledFGColor}" />
            </Trigger>
        </Style.Triggers>
    </Style>
  

Комментарии:

1. Мне кажется, ваш стиль отлично работает. Заголовок группового поля имеет правильный цвет — темно-синий с непрозрачностью 0,5. Вы не говорите о материалах внутри группового поля, верно?

2. Для меня стиль, похоже, работает только с заголовком группового поля, когда группа включена. Когда групповое поле отключено, заголовок группового поля становится серым. Я хочу, чтобы граница (которая меняется) и заголовок совпадали. По умолчанию (включен) цвет, который я установил: <SolidColorBrush x: Key=»moFGColor» Color = «DarkBlue» />

3. Тогда должно быть что-то еще, потому что использование вашего стиля, как указано выше, идеально подходит для меня. Это упрощенная версия более крупного стиля? Я не вижу, что DataTemplate. Триггеры делают что угодно. Триггеров стиля, похоже, достаточно. — По крайней мере, для меня.

4. Спасибо за быстрые ответы. Я попробую свой стиль без DataTriggers. Я также попробую отключить некоторые другие глобальные стили / ресурсы, которые могут влиять на мои объекты groupbox.

5. также может быть полезно: msdn.microsoft.com/en-us/library/ms744748 (v = против 110).aspx