Я ожидаю, что он будет применяться ко всем FrameworkElement, используемому в этом UserControl
Под всеми FrameworkElement
вы, вероятно, имеете в виду все FrameworkElements
, включая его производные. Применение стиля Style
как неявного отлично работает, если вы нацеливаетесь на отдельный элемент управления, например Button
. Однако это может работать не так, как вы ожидаете, если вы нацеливаетесь на базовый тип элемента управления, например FrameworkElement
, потому что каждая производная этого базового типа могут иметь свой собственный стиль, применяемый явно или неявно, что нарушает ваше ожидаемое поведение:
- Не основано на стиле базового типа
- Не основано на транзитивном стиле на основе стиля базового типа
- Переопределение свойств базового стиля
Существенное недоразумение состоит в том, что все стили производных базового типа будут основывать свой стиль на стиле указанный базовый тип, но это не применяется в целом.
Вы можете проверить это самостоятельно, извлекая Style
любого элемента управления через Visual Studio или Blend. Например, давайте посмотрим на Style
из Button
. Как видите, он даже не основан на FrameworkElement
, поэтому не будет применять ваш базовый стиль. Даже если это так, есть вероятность, что оно переопределит само свойство Margin
.
<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Background" Value="{DynamicResource PrimaryHueMidBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource PrimaryHueMidBrush}"/>
<!-- ...other setters. -->
</Style>
Кроме того, вы должны определить свой стиль базового типа перед любым другим стили производных, потому что вы можете использовать BasedOn
только с StaticResource
. Следовательно, если стиль производного элемента управления уже определен до вашего стиля, ваш базовый стиль не будет применяться .