Дизайн API - Почему BorderBrush не влияет на CheckBox? - PullRequest
0 голосов
/ 24 октября 2018

В UWP , BorderBrush не влияет на CheckBox.BorderThickness имеет эффект, вы можете видеть прозрачную границу вокруг элемента управления:

    <CheckBox BorderBrush="Red"
              BorderThickness="10"
              Background="Aqua"
              Content="CheckBox" />
    <RadioButton BorderBrush="Red"
                 BorderThickness="10"
                 Background="Aqua"
                 Content="RadioButton" />

enter image description here

Работает RadioButtonиначе он использует кисть.

Я НЕ хочу понять, как заставить CheckBox использовать кисть границы, я уже это знаю.

Что яищу, чтобы понять, ПОЧЕМУ команда UWP решила заставить его работать так?Это просто баг или промах с их стороны?Мне трудно в это поверить.

Интересно то, что в WPF граница работает по-разному для CheckBox и RadioButton:

enter image description here

Мне также любопытно узнать, почему команда WPF приняла решение о том, чтобы BorderThickness и BorderBrush по-разному работали на CheckBox и RadioButton, чемдля других элементов управления, которые показывают границу вокруг всего элемента управления.Кнопка является ближайшим примером.Возможно, потому, что они не хотели добавлять более специализированные свойства для настройки фактической проверки / радио?Если это так, разве они не потеряли возможность иметь границу вокруг всего контроля?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Для объяснения этого поведения необходимо проверить CheckBox стили и шаблоны .Как видите, CheckBox имеет некоторый статус в VisualStateGroups.вы просто изменяете свойство BorderBrush, но не изменяете следующее StaticResource, которое использовалось для другого VisualState.

<StaticResource x:Key="CheckBoxBorderBrushUnchecked" ResourceKey="SystemControlTransparentBrush" />
<StaticResource x:Key="CheckBoxBorderBrushUncheckedPointerOver" ResourceKey="SystemControlTransparentBrush" />
<StaticResource x:Key="CheckBoxBorderBrushUncheckedPressed" ResourceKey="SystemControlTransparentBrush" />
<StaticResource x:Key="CheckBoxBorderBrushUncheckedDisabled" ResourceKey="SystemControlTransparentBrush" />
<StaticResource x:Key="CheckBoxBorderBrushChecked" ResourceKey="SystemControlTransparentBrush" />
<StaticResource x:Key="CheckBoxBorderBrushCheckedPointerOver" ResourceKey="SystemControlTransparentBrush" />
<StaticResource x:Key="CheckBoxBorderBrushCheckedPressed" ResourceKey="SystemControlTransparentBrush" />
<StaticResource x:Key="CheckBoxBorderBrushCheckedDisabled" ResourceKey="SystemControlTransparentBrush" />
<StaticResource x:Key="CheckBoxBorderBrushIndeterminate" ResourceKey="SystemControlTransparentBrush" />
<StaticResource x:Key="CheckBoxBorderBrushIndeterminatePointerOver" ResourceKey="SystemControlTransparentBrush" />
<StaticResource x:Key="CheckBoxBorderBrushIndeterminatePressed" ResourceKey="SystemControlTransparentBrush" />
<StaticResource x:Key="CheckBoxBorderBrushIndeterminateDisabled" ResourceKey="SystemControlTransparentBrush" />

Если вы хотите полностью изменить цвет границы, вам нужно изменить выше StaticResource, например.

Метод 1

Создайте новый SolidColorBrush с помощью клавиши CheckBoxBorderBrushxxxxx, чтобы закрыть клавишу по умолчанию.

<SolidColorBrush x:Key="CheckBoxBorderBrushUnchecked" Color="Red"/>

Метод 2

Используйте значение по умолчанию StaticResource, но измените ResourceKey на другое.

<StaticResource x:Key="CheckBoxBorderBrushUnchecked" ResourceKey="SystemChromeBlackLowColor" />

enter image description here

Обновление

Это последняя полная версия CheckBox xaml template

0 голосов
/ 24 октября 2018

Шестнадцатеричный код цвета делает трюк

<CheckBox BorderBrush=" #000000"  Grid.Column="3" Grid.Row="0" BorderThickness="10" Background="Aqua" Content="CheckBox" />

В противном случае вы можете использовать преобразователь цвета и вызвать его на элементе управления

...