XAML 为什么使用ComponentResourceKey MarkupExtension?

ep6jt1vc  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(86)

我写过很多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}"
4ktjp1zp

4ktjp1zp1#

如果你正在做一个 * 没有人会使用 * 的项目,那么这两种方法都可以。
然而,想象一下你正在制作一个控件库,其他人将使用它。现在,考虑StaticResource和DynamicResource的资源查找行为。
当您使用基于stringx:Key时,可能会与资源键发生“冲突”。如果您在控件库中使用MyViewKey,* 并且您的用户 * 也使用该键,该怎么办?将使用用户的密钥-而不是您的密钥。
有时候,这是需要的-它允许用户覆盖您的样式。其他时候,不是。
ComponentResourceKey s创建一个明确的资源键。

相关问题