В настоящее время я разрабатываю приложение WPF, которое использует PropertyGrid из библиотеки Extended WPF Toolkit.Extended WPF Toolkit PropertyGrid PasswordEditor
Чтобы отображать имена и описания в языковой независимой усадьбе, я использую класс-оболочку, который содержит необходимые атрибуты в соответствии с предоставленной документацией. Вот сокращенный список
[LocalizedDisplayName("ServerConfig", typeof(Resources.Strings.Resources))]
public class ServerConfigPropertyGrid
{
#region fields
private ServerConfig serverConfig;
#endregion
#region properties
[LocalizedCategory("VeinStoreCategory", typeof(Resources.Strings.Resources))]
[LocalizedDisplayName("ActiveDirectoryPasswordDisplayName", typeof(Resources.Strings.Resources))]
[LocalizedDescription("ActiveDirectoryPasswordDescription", typeof(Resources.Strings.Resources))]
[Editor(typeof(PasswordEditor), typeof(PasswordEditor))]
public string LdapPassword
{
get { return serverConfig.LdapPassword; }
set { serverConfig.LdapPassword = value; }
}
#endregion
#region constructor
public ServerConfigPropertyGrid(ServerConfig serverConfig)
{
// store serverConfig
this.serverConfig = serverConfig;
}
#endregion
}
Теперь я хотел бы использовать пользовательский редактор для свойства LdapPassword, так как это пароль и не должен быть виден как обычный текст в PropertyGrid. Поскольку я не единственный и не первый, кто придумал это требование, я нашел реализацию такого редактора в проекте discussions section проекта Codeplex.
public class PasswordEditor : ITypeEditor
{
#region fields
PropertyItem _propertyItem;
PasswordBox _passwordBox;
#endregion
public FrameworkElement ResolveEditor(PropertyItem propertyItem)
{
_propertyItem = propertyItem;
_passwordBox = new PasswordBox();
_passwordBox.Password = (string)propertyItem.Value;
_passwordBox.LostFocus += OnLostFocus;
return _passwordBox;
}
private void OnLostFocus(object sender, RoutedEventArgs e)
{
// prevent event from bubbeling
e.Handled = true;
if (!_passwordBox.Password.Equals((string)_propertyItem.Value))
{
_propertyItem.Value = _passwordBox.Password;
}
}
}
В соответствии с документацией, представленной на Codeplex все, что нужно сделать, это добавить EditorAttribute на имущество и все должно быть хорошо, но PasswordEditor не отображается на всех. Даже не получает конструктор, поэтому я предполагаю, что должна быть какая-то проблема с объявлением EditorAttribute.
В настоящее время я использую версию 2.4.0 Расширенного WPF Toolkit в рамках проекта сконфигурированной для компиляции в .NET 4.5.1.
Кто-то с идеей, что может быть неправильным?
Вы используете последнюю версию WpfToolkit (2.4.0)? К каким библиотекам относятся «локализованные» атрибуты? Я попытался использовать «EditorAttribute» в примере проекта, и он работает правильно. –
Спасибо вам за ответ Il Vic. Я управляю своими зависимостями через NuGet, поэтому я использую версию 2.4.0 из расширенного инструментария WPF. Атрибуты «Локализованные ...» являются собственными, поэтому они в настоящее время находятся в одном и том же решении. Они также работают, потому что строки правильно отображаются в PropertyGrid. Вы также использовали класс-оболочку для хранения своих свойств или использовали другой класс? – slator