Ответ 1
Наконец, я смог решить эту проблему, используя методы, описанные в этой записи в блоге:
http://web.archive.org/web/20090602111317/http://bea.stollnitz.com/blog/?p=52
У меня есть пользовательский пользовательский элемент управления, который имеет обычный текстовый ящик и пароль.
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>
Кто-нибудь знает, как отлаживать это поведение?
Наконец, я смог решить эту проблему, используя методы, описанные в этой записи в блоге:
http://web.archive.org/web/20090602111317/http://bea.stollnitz.com/blog/?p=52
У меня также была такая же проблема в дизайне xaml, но по-другому. Я добавляю детали здесь, если это кому-то полезно.
Я использовал сторонний элемент управления, который имеет собственную тему, определенную в dll. Я ссылался на эту DLL и использовал "StaticResource" для ссылки на некоторые ресурсы, определенные в этой DLL. Затем дизайнер xaml подчеркнул, что мой код xaml говорит что-то вроде "D.Unset не является допустимым значением для xxx". Но программа компилируется и запускается без проблем.
Чтобы устранить эту раздражающую подчеркивание, решение прост: Изменить 'StaticResource
' на 'DynamicResource
'.
Другой более сложный способ - использовать 'ResourceDictionary.MergedDictionaries
' для включения ресурсов в эту dll в ваш файл xaml.
Просто хотел добавить, что это было полезно при решении проблемы для получения ошибки "DependencyProperty.UnsetValue не является допустимым значением для свойства", в частности, в первой части блога, предполагающей, что ваш ресурс может быть недействительным ( т.е. предварительно определенные и доступные для использования). Оказывается, в моем случае это была классическая проблема, заключающаяся в том, что я не определял свои ресурсы в правильном объеме и до того, как их действительно вызвали.
Мой совет: сначала убедитесь, что вы определили StaticResource в соответствующем разделе Element.Resources. Убедитесь, что определение физически расположено до фактического вызова ресурса.
Я советую перепроверить (дважды или более) ваш ResourceDictionary. Я пришел к этой ошибке после добавления в свой ResourceDictionary:
<Style TargetType="Label" x:Key="myLabel">
<Setter Property="Foreground" Value="{StaticResource myDefinedColor}"/>
...
</Style>
а {StaticResource myDefinedColor}
- НИЖЕ. В моем случае ошибка была связана с Foreground, у которой есть UnsetValue. Так что на самом деле это действительно была неустановленная ценность...
Я переместил свой стиль для метки ниже, определяя свой цвет, и это все!