我有一个自定义登录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>
有谁知道如何调试此行为?
我在xaml设计师中也有同样的问题,但是方式却截然不同。我在这里添加细节,以防它对某人有帮助。
我使用的是第三方控件,它在dll中定义了自己的主题。我引用了这个dll并使用'StaticResource'来引用该dll中定义的一些资源。然后xaml设计师强调了我的xaml代码,说“D.Unset不是xxx的有效值”。但程序编译运行没有任何问题。
为了消除这些烦人的下划线,解决方案很简单:将'StaticResource
'改为'DynamicResource
'。另一种更复杂的方法是使用'ResourceDictionary.MergedDictionaries
'将该dll中的资源包含到您的xaml文件中。
我终于能够通过使用此博客条目中描述的技术解决此问题:
http://web.archive.org/web/20090602111317/http://bea.stollnitz.com/blog/?p=52
只是想补充一点,这有助于解决问题,因为“DependencyProperty.UnsetValue不是属性的有效值”错误已解决,特别是博客的第一部分暗示您的资源可能无效(即之前已定义)并可供使用)。事实证明,这是一个经典的问题,即在正确的范围内并且在实际调用它们之前没有定义我的资源。
我的建议:首先要确保在相应的Element.Resources部分中定义StaticResource。确保在实际调用资源之前,物理上定义了定义。
我建议你重新检查(两次或更多次)你的ResourceDictionary。添加到ResourceDictionary后,我遇到了这个错误:
<Style TargetType="Label" x:Key="myLabel">
<Setter Property="Foreground" Value="{StaticResource myDefinedColor}"/>
...
</Style>
而{StaticResource myDefinedColor}
被定义为低于它。在我的情况下,错误是关于具有UnsetValue的Foreground。所以实际上它真的是一个未设置的价值......我将我的风格移动到下面定义我的颜色,这就是它!