#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