Я пытаюсь создать поле пароля (маскированного) для WPF PropertyGrid, которое используется в WF-реестре-дизайнере-дизайнере. Обратите внимание, что меня не интересует элемент безопасности. Я просто хочу, чтобы пароль был скрыт от пользователя. Я действительно боролся с чем-то я бы подумал, было бы просто реализовать, но я в конце концов нашел эту статью, которая действительно помогла:Поле пароля/маски в WPF PropertyGrid не сохраняется
WPF PasswordBox and Data binding
После создания PasswordBoxAssistant класса согласно статье, я создал WPF UserControl с следующий XAML и код:
XAML
<Grid>
<PasswordBox x:Name="PasswordBox"
Background="Green"
local:PasswordBoxAssistant.BindPassword="true"
local:PasswordBoxAssistant.BoundPassword="{Binding Password,
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
Code-Behind:
public partial class PasswordUserControl : UserControl
{
public PasswordUserControl()
{
InitializeComponent();
}
public static readonly DependencyProperty PasswordProperty =
DependencyProperty.Register("Password",
typeof(string), typeof(PasswordUserControl),
new FrameworkPropertyMetadata(PasswordChanged));
public string Password
{
get
{
return (string)GetValue(PasswordProperty);
}
set
{
SetValue(PasswordProperty, value);
}
}
private static void PasswordChanged(DependencyObject source,
DependencyPropertyChangedEventArgs e)
{
if (e.NewValue != null)
{
(source as PasswordUserControl)?.UpdatePassword(e.NewValue.ToString());
}
else
{
(source as PasswordUserControl)?.UpdatePassword(string.Empty);
}
}
private void UpdatePassword(string newText)
{
PasswordBox.Password = Password;
}
}
Затем я создал PropertyValueEditor
класса (называемый PasswordEditor.cs), и я предполагаю, что это та часть, которая не работает, и я не правильно настройка.
Я связываю PasswordProperty с UserControl
с полем Value
PropertyValueEditor
.
public class PasswordEditor : PropertyValueEditor
{
public PasswordEditor()
{
this.InlineEditorTemplate = new DataTemplate();
FrameworkElementFactory stack = new FrameworkElementFactory(typeof(StackPanel));
FrameworkElementFactory passwordBox = new
FrameworkElementFactory(typeof(PasswordUserControl));
Binding passwordBoxBinding = new Binding("Value") { Mode = BindingMode.TwoWay };
passwordBox.SetValue(PasswordUserControl.PasswordProperty, passwordBoxBinding);
stack.AppendChild(passwordBox);
this.InlineEditorTemplate.VisualTree = stack;
}
}
Я попытался установить его на StringValue
, а также на других образцах WF PropertyValueEditor я нашел, но безрезультатно.
Поле пароля (маскированное) теперь корректно отображается в моем WPF PropertyGrid, но оно не сохраняется, когда я переключаюсь на другую активность WF и переключаюсь обратно на ту, которая содержит поле пароля.
Может ли кто-нибудь указать мне правильное направление?
Спасибо.
Снова любая помощь будет оценена по достоинству.
Спасибо.