如果有多种样式:
<Style TargetType="{x:Type local:MyControl}">
...
从目标相同控件类型的资源字典中合并的是第一个遇到的样式还是最后一个样式?
我在哪里可以找到管理此类事情的规则?
答案 0 :(得分:4)
从最接近相关控件的ResourceDictionary应用样式。一个例子:
<Window>
<Window.Resource>
<Style 1/>
<Window.Resources>
<Grid>
<Grid.Resources>
<Style 2/>
</Grid.Resources>
<TextBox/>
</Grid>
</Window>
在上面的示例中,Style 2将应用于TextBox。如果您希望级联样式(将两种样式应用于TextBox),可以使用BasedOn
将Style2上的BasedOn="{StaticResource {x:Type TextBox}}"
设置为指向Style1。请检查语法,我在这里没有VS.
如您所见,类型变为Key
。由于不允许在单个ResourceDictionary
中使用相同键的两个元素,因此无法合并具有重叠样式的两个ResourceDictionaries。应该可以围绕这样的要求进行设计,记住ResourceDictionary可以引用另一个用途。同样,您使用BasedOn
。
答案 1 :(得分:2)
这是您的评论和问题的答案。在这种情况下,Name, x:Name
无法在场景中播放。字典中的每个资源都必须具有Key
。对于目标样式,WPF基础结构会生成Key
,因此,具有相同目标类型的样式将具有相同的键,因此您无法为字典中的每种类型使用多个目标样式。
答案 2 :(得分:0)
它会引发异常。这是我试图测试的:
我写了一个简单的ResourceDictionary
,其中包含2个样式,但TargetType
但没有x:Key
(不是x:Name
)。
<Style TargetType="TextBox">
<Setter Property="Height" Value="100"/>
</Style>
<Style TargetType="TextBox">
<Setter Property="Height" Value="200"/>
</Style>
重建项目并成功顺利完成。现在哪些将被应用?
好吧,当我运行它时,它在加载样式时引发了一个很大的异常。简而言之,它不起作用。