如何在InnerException为null时调试DependencyProperty.Unsetvalue错误

问题描述 投票:16回答:4

我有一个自定义登录usercontrol,具有普通文本框和密码框。

Blend拒绝与PasswordBox合作说“DP.UnsetValue”对PasswordChar属性无效。但是,该项目在Blend或VS2010中编译并运行良好。 VS2010中的苹果酒设计师似乎并不介意错误,因为它实际上呈现了我的UserControl设计时配置。

通常,当我收到其中一个错误时,会发生一个InnerException,其中缺少文件/资源​​的路径。这不是这里的情况,我不知道如何在将来出现时如何解决这个问题。

我换了标签把PasswordBox变成了正常的TextBox,看起来很好。但是我需要PasswordBox提供的输入屏蔽。在Blend中注释掉该对象并完成我的控件样式是不太实际的。

这是我的Xaml:

 <PasswordBox x:Name="PasswordTextbox" PasswordChar="*" Height="26" VerticalAlignment="Center" Grid.Column="1" Grid.Row="1" Margin="5" RenderTransformOrigin="0.5,0.5" TabIndex="3">
                <PasswordBox.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform/>
                    </TransformGroup>
                </PasswordBox.RenderTransform>
                <PasswordBox.Effect>
                    <DropShadowEffect />
                </PasswordBox.Effect>
                <PasswordBox.Triggers>
                    <EventTrigger RoutedEvent="UIElement.GotFocus">
                        <BeginStoryboard Storyboard="{StaticResource StoryboardScaleUpFontIncrease}"/>
                    </EventTrigger>
                    <EventTrigger RoutedEvent="UIElement.LostFocus">
                        <BeginStoryboard Storyboard="{DynamicResource StoryboardScaleNormalFontNormal}"/>
                    </EventTrigger>
                </PasswordBox.Triggers>
            </PasswordBox>

有谁知道如何调试此行为?

wpf dependency-properties
4个回答
10
投票

我在xaml设计师中也有同样的问题,但是方式却截然不同。我在这里添加细节,以防它对某人有帮助。

我使用的是第三方控件,它在dll中定义了自己的主题。我引用了这个dll并使用'StaticResource'来引用该dll中定义的一些资源。然后xaml设计师强调了我的xaml代码,说“D.Unset不是xxx的有效值”。但程序编译运行没有任何问题。

为了消除这些烦人的下划线,解决方案很简单:将'StaticResource'改为'DynamicResource'。另一种更复杂的方法是使用'ResourceDictionary.MergedDictionaries'将该dll中的资源包含到您的xaml文件中。


9
投票

我终于能够通过使用此博客条目中描述的技术解决此问题:

http://web.archive.org/web/20090602111317/http://bea.stollnitz.com/blog/?p=52


3
投票

只是想补充一点,这有助于解决问题,因为“DependencyProperty.UnsetValue不是属性的有效值”错误已解决,特别是博客的第一部分暗示您的资源可能无效(即之前已定义)并可供使用)。事实证明,这是一个经典的问题,即在正确的范围内并且在实际调用它们之前没有定义我的资源。

我的建议:首先要确保在相应的Element.Resources部分中定义StaticResource。确保在实际调用资源之前,物理上定义了定义。


3
投票

我建议你重新检查(两次或更多次)你的ResourceDictionary。添加到ResourceDictionary后,我遇到了这个错误:

<Style TargetType="Label" x:Key="myLabel">
    <Setter Property="Foreground" Value="{StaticResource myDefinedColor}"/>
    ...
</Style>

{StaticResource myDefinedColor}被定义为低于它。在我的情况下,错误是关于具有UnsetValue的Foreground。所以实际上它真的是一个未设置的价值......我将我的风格移动到下面定义我的颜色,这就是它!

© www.soinside.com 2019 - 2024. All rights reserved.