在WPF中使用一种样式但不能同时使用两种样式

时间:2015-03-05 10:37:24

标签: c# wpf styles mergeddictionaries

我正在准备511认证,其中一个我不明白的问题就是这个:

You are developing a Windows Presentation Foundation (WPF) application.

Border 对象使用两种样式,蓝色绿色。两种样式具有相同的值 CornerRadiusand BrushThicknessproperties 以及 Backgroundproperty 的不同值。

您需要以蓝色或绿色样式定义 CornerRadius和BrushThicknesssettings ,但不能同时定义两者。 你应该怎么做?

A)将蓝色和绿色分成两个文件。将基本设置放在蓝色中并使用MergedDictionaries。确保蓝色文件在列表中排在第二位。

B)将蓝色和绿色放入同一个文件中。将基本设置设置为蓝色,并将蓝色标记为基于绿色。

C)将蓝色和绿色放入同一个文件中。将基本设置设置为蓝色,并将绿色标记为“基于蓝色”。

D)将蓝色和绿色分成两个文件。将基本设置设置为蓝色并使用MergedDictionaries。确保绿色文件在列表中排在第二位。

正确的答案是B

任何人都可以向我解释为什么它是B而不是C

1 个答案:

答案 0 :(得分:1)

如果我们回答 B (蓝色是基础,并且基于绿色):

<Style x:Key="Green" TargetType="{x:Type Border}">
    <Setter Property="Background" Value="Green" />
</Style>

<Style x:Key="Blue" TargetType="{x:Type Border}" BasedOn="{StaticResource Green}">
    <Setter Property="CornerRadius" Value="5" />
    <Setter Property="BrushThickness" Value="1" />
    <Setter Property="Background" Value="Blue" />
</Style>

此处,Green样式BorderThickness样式继承CornerRadiusBlue属性。

如何回答 C ? (蓝色是基础,绿色是基于蓝色):

<Style x:Key="Blue" TargetType="{x:Type Border}">
    <Setter Property="CornerRadius" Value="5" />
    <Setter Property="BrushThickness" Value="1" />
    <Setter Property="Background" Value="Blue" />
</Style>

<Style x:Key="Green" TargetType="{x:Type Border}" BasedOn="{StaticResource Blue}">
    <Setter Property="Background" Value="Green" />
</Style>

此处,Green样式继承了BorderThickness样式的CornerRadiusBlue属性。

我觉得很清楚 C 是正确的答案,而不是 B