В настоящее время я разрабатываю приложение WPF, которое использует PropertyGrid из библиотеки Extended WPF Toolkit. .
Чтобы отображать имена и описания в поместье, не зависящем от языка, я использую класс-оболочку, который содержит необходимые атрибуты в соответствии с предоставленной документацией. Здесь сокращенный список
[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. Поскольку я не единственный и не первый, кто придумал это требование, я нашел реализацию такого редактора в раздел обсуждений проекта на 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 в проекте, настроенном для компиляции в .NET 4.5.1.
Кто-то с идеей, что может быть не так?
EditorAttribute
в примере проекта, и он работает правильно. - person Il Vic   schedule 17.03.2015