ContentControl (CheckBox) не наследует Foreground

55
6

Похоже, что элемент управления CheckBox не наследует его свойство Foreground:

<UserControl Foreground="Orange">
<StackPanel>
<!-- this shows as black - no inheritance -->
<CheckBox Content="foo" />

<!-- this shows as turquoise -->
<CheckBox Foreground="Turquoise" Content="bar" />

<!-- but this shows as orange - inheritance works here -->
<TextBlock Text="baz" />
</StackPanel>
</UserControl>

Screenshot -- "foo" is black, "bar" is turquoise, "baz" is orange

Какая причина этого, и что является лучшим обходным решением?

Edit @helb предположил, что причиной является стиль по умолчанию, который устанавливает переднего плана черный. Я не думаю, что это объясняет это, хотя: если вы переопределите этот стиль и удалите строку - <Setter Property="Foreground" Value="#FF000000"/> - поведение останется прежним.

спросил(а) 2015-02-02T19:21:00+03:00 4 года, 10 месяцев назад
1
Решение
56

Лучшее, что я мог найти, это то, что может быть объяснением:

Свойство наследования свойств свойства не глобально включено для всех свойств зависимостей, потому что время вычисления для наследования имеет некоторое влияние на производительность. Наследование значений свойств обычно разрешено только для свойств, где определенный сценарий предполагает, что наследование значений свойств является подходящим.

Поэтому, возможно, они решили не применять наследование Foreground для ContentControls по соображениям производительности. Было бы неплохо подтвердить это. (Этот ответ утверждает, что использовал отражатель, чтобы выявить непрозрачное шестнадцатеричное значение во внутренней регистрации DP, что может иметь к этому какое-то отношение).

Это одно из возможных решений (кажется, кажется, адекватным):

<Style TargetType="CheckBox">
<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=Foreground}" />
</Style>

редактировать

Больше доказательств для теории ContentControl не наследует Foreground: Button не наследует; ComboBox наследует.

ответил(а) 2015-02-02T19:34:00+03:00 4 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема