好吧,我偶然发现了似乎可以作为答案的内容,但不明白为什么......如果我尝试更改 MyLabel2 (这是第二个派生实例)的样式
<Style x:Key="styleMyLabel2" TargetType="{x:Type local:MyLabel2}" BasedOn="{StaticResource styleMyLabel}" >
<Setter Property="FontSize" Value="22" />
</Style>
到(仅删除 x:Key 元素)
<Style TargetType="{x:Type local:MyLabel2}" BasedOn="{StaticResource styleMyLabel}" >
<Setter Property="FontSize" Value="22" />
</Style>
XAML 可以工作...无需显式关联要使用的“样式”。它直接根据类关联找到它。
<src:MyLabel2 Content="Now Works as expected"/>
现在它可以工作了,有人可以解释为什么额外使用 x:Key 引用会杀死它吗?即:如果您有 x:key,类实例并不暗示它,但如果没有它,直接类会自动找到它。
从我对风格的探索中扩展......
所以,这是我发现的一些额外内容。可以将样式多次定义为相同的目标类型...但是,一个样式可以有一个 x:key 引用,另一个可以有一个 BasedOn 引用。这看起来就像重载具有相同数量但不同数据类型参数的函数。
在我的问题中,一旦将“x:Key”引用添加到样式中,“TargetType”的任何直接类实例都不会自动链接到正确的样式,几乎就像带有“x:key”的样式声明一样" 要求类的任何实例在控件的 xaml 中显式添加样式上下文。那么现在,如何两全其美。我创建了一种以 TargetType 作为基类的第二种样式,但它的 BasedOn 指向 x:key 引用的样式。这样,我就获得了样式的默认自定义,但仍然可以将其分配给基类和派生类,因此控件的所有 3 个版本都可以自动与相应的样式同步,而无需显式引用。
<Style TargetType="Label" x:Key="wpfBaseLabel">
<Setter Property="FontSize" Value="11" />
</Style>
<Style TargetType="Label" BasedOn="{StaticResource wpfBaseLabel}" />
<Style TargetType="{x:Type local:MyLabel}" BasedOn="{StaticResource wpfBaseLabel}">
<Setter Property="Foreground" Value="Blue" />
</Style>
因此,现在,在最终的 XAML 中,我可以在有或没有显式样式关联的情况下使用所有 3 个“类”。