我很难理解{DependencyProperty.UnsetValue}
为什么会发生,而且说实话它的确切含义。我有一个“借用代码”的案例,它在原始解决方案中运行得很好,但在我的项目中却没有。
有三种样式定义:
<Style TargetType="Button" BasedOn="{StaticResource {x:Type ButtonBase}}" />
<Style TargetType="c:DropDownButton" BasedOn="{StaticResource {x:Type ButtonBase}}" />
<Style TargetType="{x:Type ButtonBase}">
....
<Setter Property="Background" Value="{StaticResource ButtonBrush}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ButtonBase">
<Border x:Name="PART_border"
....
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}">
<ContentPresenter RecognizesAccessKey="True"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
orizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
Background="{TemplateBinding Background}"
给出错误,使用硬编码颜色按预期工作。
当我停用<!--<Setter Property="Background" Value="{StaticResource ButtonBrush}"/>-->
时,也会发生异常,但只有在之后,应用程序才会加载并且可见。这不是很奇怪吗?
我无法弄清楚为什么原始项目没有这个问题 解决方法是:wpf必须在应用样式之前找到画笔 在我的情况下,我在样式定义之前移动了使用的画笔 我理解上面的“奇怪行为”,因为wpf会在稍后的时间点应用画笔,因此会在稍后的时间点抛出异常。
答案 0 :(得分:1)
如果您的画笔放在不同的资源字典中,它确实在编译时识别出您的应用程序中存在这样的键,但据我所知,无法保证何时应用该资源。
在这种情况下使用 DynamicResource 来解决问题。