同一目标类型的多个样式的优先级?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同一目标类型的多个样式的优先级?相关的知识,希望对你有一定的参考价值。

如果有多种样式:

<Style TargetType="{x:Type local:MyControl}">
...

从目标相同类型的控件的资源字典中合并,它应该具有优先权,它是遇到的第一个样式还是最后一个样式?

我在哪里可以找到管理这些事情的规则?

答案

从最接近相关控件的ResourceDictionary应用样式。一个例子:

 <Window>
    <Window.Resource>
        <Style 1/>
    <Window.Resources>
    <Grid>
        <Grid.Resources>
            <Style 2/>
        </Grid.Resources>
        <TextBox/>
    </Grid>
</Window>

在上面的示例中,样式2将应用于TextBox。如果您希望级联样式(将两种样式应用于TextBox),可以使用BasedOn将Style2上的BasedOn="{StaticResource {x:Type TextBox}}"设置为指向Style1。请检查语法,我这里没有VS.

如您所见,类型变为Key。由于不允许在单个ResourceDictionary中具有两个具有相同键的元素,因此无法合并具有重叠样式的两个ResourceDictionaries。应该可以围绕这样的要求进行设计,记住ResourceDictionary可以引用另一个用途。再次,你使用BasedOn

另一答案

这是您的评论和问题的答案。在这种情况下,Name, x:Name不参加比赛。字典中的每个资源都必须具有Key。对于目标样式,WPF基础结构会生成Key,因此,具有相同目标类型的样式将具有相同的键,因此您不能对字典中的每种类型使用多个目标样式。

另一答案

它会引发异常。这是我试图测试的:

我写了一个简单的ResourceDictionary有两种风格,相同的TargetType但没有x:Key(不是x:Name)。

<Style TargetType="TextBox">
    <Setter Property="Height" Value="100"/>
</Style>

<Style TargetType="TextBox">
    <Setter Property="Height" Value="200"/>
</Style>

重建项目并成功顺利完成。现在哪些将被应用?

好吧,当我运行它时,它在加载样式时引发了一个很大的异常。简而言之,它不起作用。

以上是关于同一目标类型的多个样式的优先级?的主要内容,如果未能解决你的问题,请参考以下文章

CSSCSS 特性 ③ ( CSS 优先级 | 优先级引入 | 选择器基本权重 )

Chrome-Devtools代码片段中的多个JS库

CSS 之层叠样式的优先级

CSS样式优先级

如何在多个页面使用同一个HTML片段

多个用户访问同一段代码