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



如果有多种这样的样式:

<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),可以将样式2上的BasedOn设置为使用BasedOn="{StaticResource {x:Type TextBox}}"指向样式1。请检查语法,我这里没有VS。

如您所见,该类型变为Key。由于不允许在单个ResourceDictionary中有两个具有相同键的元素,因此不能合并具有重叠样式的两个ResourceDictionary。应该可以围绕这样的需求进行设计,记住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>

重建了这个项目,它成功地完成了。现在哪个会被申请?

嗯,当我运行它时,它在加载样式时抛出了一个很大的异常。总之,它不起作用。

相关内容

  • 没有找到相关文章

最新更新