用于设置DefaultStyleKey的approches之间的区别

akj*_*shi 6 .net wpf themes custom-controls resourcedictionary

我正在创建一个自定义控件(派生自Control),并希望为控件定义默认主题.以前我创建的所有自定义控件都已使用过

static IntegerUpDown()
{
    DefaultStyleKeyProperty.OverrideMetadata(typeof(IntegerUpDown), 
    new FrameworkPropertyMetadata(typeof(IntegerUpDown)));
}
Run Code Online (Sandbox Code Playgroud)

使用此assembly属性:

[assembly: ThemeInfo(ResourceDictionaryLocation.SourceAssembly,
ResourceDictionaryLocation.SourceAssembly)]
Run Code Online (Sandbox Code Playgroud)

这样做的替代方法是(我在一些控件中也注意到了) -

public IntegerUpDown()
{
    DefaultStyleKey = typeof(IntegerUpDown);
}
Run Code Online (Sandbox Code Playgroud)

我想知道这两种方法的优点和缺点,以及哪一种更喜欢?

WPF*_*-it 3

我可以观察到第一种方法要求依赖属性框架注册默认样式键。它只执行一次(在静态构造函数中),然后用于 的所有实例IntegerUpDownIntegerUpDown第二种方法在单独创建 的实例时显式分配 Key 。他们俩对我来说似乎都不错。

\n\n

MSDN 说...

\n\n
\n

可以覆盖元数据,以便子类可以通过覆盖属性\xe2\x80\x99s 元数据来调整 DP,而不是完全\n 重新实现属性本身。

\n
\n