我写过很多WPF样式和模板,但从未使用过ComponentResourceKey
标记扩展。我一直不明白我为什么需要它。
显然我读了这个in the docs
定义和引用从外部程序集加载的资源的键。这使资源查找能够在程序集中指定目标类型,而不是在程序集中或类上指定显式资源字典。
但我还是不明白这能给我带来什么。无论哪种方式,我都必须指定目标类型。
例如,在阅读关于创建custom view for the ListViewControl的文章时,我偶然发现了这篇文章,它使用了这样开始的样式:
<Style x:Key="{ComponentResourceKey
TypeInTargetAssembly={x:Type l:PlainView},
ResourceId=myPlainViewDSK}"
TargetType="{x:Type ListView}"
BasedOn="{StaticResource {x:Type ListBox}}"
>
如果这是我的项目,我为什么不想从这样的事情开始呢?
<Style x:Key="MyViewKey" TargetType="{x:Type l:PlainView}"
1条答案
按热度按时间4ktjp1zp1#
如果你正在做一个 * 没有人会使用 * 的项目,那么这两种方法都可以。
然而,想象一下你正在制作一个控件库,其他人将使用它。现在,考虑StaticResource和DynamicResource的资源查找行为。
当您使用基于
string
的x:Key
时,可能会与资源键发生“冲突”。如果您在控件库中使用MyViewKey
,* 并且您的用户 * 也使用该键,该怎么办?将使用用户的密钥-而不是您的密钥。有时候,这是需要的-它允许用户覆盖您的样式。其他时候,不是。
ComponentResourceKey
s创建一个明确的资源键。