所以我們試圖通過改變其默認樣式在generic.xaml無法覆蓋WPF控件的默認風格在generic.xaml
到retemplate一些股票的WPF控件當我們通常做這一點,我們繼承的控制,然後在其靜態初始化器中覆蓋子類控件的默認樣式鍵。但是,我們正試圖在不進行子類化的情況下重寫基本控件。這樣,在公司使用股票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引擎無視我們的風格,因爲默認的樣式鍵或者是
答:不會覆蓋
或B:第一次發現在他們的generic.xaml自己的風格。
我的問題是,有沒有解決這個問題?我的假設是否正確?
UPDATE:
根據參考源,默認樣式關鍵是在股票WPF控件覆蓋了TextBlock.cs在這種情況下
Reference Source TextBlock.cs(346線)
請注意,名稱DefaultStyles.xaml可以是任何東西。這只是一個示例名稱 –