2015-03-17 19 views
0

В настоящее время я разрабатываю приложение 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.

Кто-то с идеей, что может быть неправильным?

+0

Вы используете последнюю версию WpfToolkit (2.4.0)? К каким библиотекам относятся «локализованные» атрибуты? Я попытался использовать «EditorAttribute» в примере проекта, и он работает правильно. –

+0

Спасибо вам за ответ Il Vic. Я управляю своими зависимостями через NuGet, поэтому я использую версию 2.4.0 из расширенного инструментария WPF. Атрибуты «Локализованные ...» являются собственными, поэтому они в настоящее время находятся в одном и том же решении. Они также работают, потому что строки правильно отображаются в PropertyGrid. Вы также использовали класс-оболочку для хранения своих свойств или использовали другой класс? – slator

ответ

0

Просто нашел решение самостоятельно. Приложение WPF включает в себя архитектуру плагина, которая загружает все классы и их зависимости во время выполнения. Кажется, что где-то была ошибка при поиске классов Xceed и, следовательно, редакторов по умолчанию, которые используются внутри PropertyGrid. Так что это не кодировка, а скорее ошибка конфигурации. Извините, парни за кражу вашего времени.

Смежные вопросы