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

时间:2010-09-24 19:48:30

标签: wpf dependency-properties

我有一个自定义登录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>

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

4 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:10)

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

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:3)

我建议您重新检查(两次或更多次)您的ResourceDictionary。我添加到ResourceDictionary之后出现了这个错误:

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

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