Таким образом, мы пытаемся retemplate некоторого запаса элементов управления WPF, изменяя их стили по умолчанию в Generic.xamlНевозможно переопределить стиль по умолчанию управления WPF в Generic.xaml
Когда мы обычно делаем это мы подкласс управления, а затем переопределите ключ стиля по умолчанию элемента управления подкласса в его статическом инициализаторе. Тем не менее, мы пытаемся просто переопределить базовый элемент управления без подклассификации. Таким образом, любой пользователь в компании, использующий управление запасами wpf, получит наш новый стиль по умолчанию.
Возможно, я не могу заставить это работать.
В моем приложении для песочницы, которое является утомительной версией нашей реальной проблемы, у меня есть следующее.
MainWindow.xaml
<StackPanel>
<TextBlock>It doesn't work</TextBlock>
<local:CustomTextBlock>It works</local:CustomTextBlock>
</StackPanel>
Темы/Generic.xaml
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontSize" Value="100" />
</Style>
<Style TargetType="{x:Type test:CustomTextBlock}">
<Setter Property="FontSize" Value="100" />
</Style>
CustomTextBlock.cs
public class CustomTextBlock : TextBlock
{
static CustomTextBlock()
{
Type _CustomTextBlock = typeof(CustomTextBlock);
DefaultStyleKeyProperty.OverrideMetadata(
_CustomTextBlock,
new FrameworkPropertyMetadata(_CustomTextBlock));
}
}
В результате этого отображается.
Моя теория состоит в том, что двигатель WPF игнорирует наш стиль, потому что ключ стиля по умолчанию либо
A: не переопределяется
или B: это найти свой стиль в их Generic.xaml первым.
Мой вопрос: есть ли работа для этого? Правильны ли мои предположения?
UPDATE:
Согласно эталонного источника, в качестве ключа по умолчанию стиль переопределяется в управлении МОФ запаса для TextBlock.cs в этом случае
Reference Source TextBlock.cs (линия 346)
Обратите внимание, что имя 'DefaultStyles.xaml' может быть любым. Это было всего лишь примерное имя –