Проверка правописания и класс PasswordBox
86WPF --- Элементы управления WPF --- Проверка правописания и класс PasswordBox
Проверка правописания
У элемента TextBox есть необычная возможность — встроенная проверка правописания, при которой нераспознанные слова подчеркиваются красной волнистой линией. Пользователь может щелкнуть правой кнопкой мыши на нераспознанном слове и выбрать из списка правильный вариант.
Чтобы включить функцию проверки правописания в элементе TextBox, нужно просто задать свойство зависимости SpellCheck.IsEnabled:
<TextBox SpellCheck.IsEnabled="True">...</TextBox>
Проверка правописания встроена в WPF и не зависит от любого другого программного обеспечения (например, Office). Функция проверки правописания определяет необходимый словарь на основании выбранного пользователем языка ввода на клавиатуре.
Можно явно указать словарь с помощью свойства Language элемента TextBox, унаследованного от класса FrameworkElement, или с помощью атрибута xml:lang в элементе <TextBox>. Однако в настоящее время проверка правописания ограничена четырьмя языками: английским, испанским, французским и немецким. Для французского и немецкого языков можно с помощью свойства SpellingReform указать, применять ли правила орфографии, введенные после 1990 г.
В предыдущих версиях WPF функция проверки правописания не поддерживала пользовательскую настройку. В WPF 4 можно добавить список слов, которые не следует считать ошибочными (они также, когда нужно, будут включаться в предлагаемые варианты исправления при щелчке правой кнопкой). Для этого необходимо вначале создать файл лексикона, который представляет собой просто текстовый файл с расширением .lex. Этот файл должен содержать список слов, по одному слову в строке в алфавитном порядке.
Можно указать, что лексикон должен применяться только к конкретному языку, добавив идентификатор локали. Вот как можно указать, что перечисленные слова должны использоваться, только если текущим языком является английский:
#LID 1033 acantholysis atypia bulla chromonychia dermatoscopy desquamation ...
Кроме этого, поддерживаются идентификаторы локалей 3082 (испанский), 1036 (французский) и 1031 (немецкий).
Возможность добавления пользовательского словаря не предназначена для использования дополнительных языков. Она просто добавляет перечисленные слова в уже поддерживаемый язык (например, английский). Например, такой дополнительный словарь можно использовать для распознавания имен или медицинских терминов.
После создания файла лексикона проверьте свойство SpellCheck.IsEnabled для данного элемента TextBox: оно должно быть равно true. И теперь остается только с помощью свойства SpellCheck.CustomDictionaries прикрепить объект Uri, указывающий на пользовательский словарь. Если вы захотите указать его средствами XAML, как в нижеприведенном примере, вначале нужно импортировать пространство имен System, чтобы иметь возможность объявить объект Uri в разметке:
<Window xmlns:sys="clr-namespace:System;assembly=system" ... >
Класс PasswordBox
Элемент PasswordBox похож на элемент TextBox, однако он отображает строку символов-кружочков, скрывающих настоящие символы. (С помощью свойства PasswordChar можно выбрать другой скрывающий символ.) Кроме того, PasswordBox не поддерживает работу с буфером обмена, поэтому вы не сможете скопировать содержащийся в нем текст.
По сравнению с классом TextBox класс PasswordBox имеет более простой интерфейс. Как и TextBox, он содержит свойство MaxLength, методы Clear(), Paste() и SelectAll(), а также событие PasswordChanged, которое возникает в случае изменения текста. А главное отличие этого элемента управления от TextBox находится в его внутренностях. Свойство Password позволяет задать текст и прочитать его как обычную строку, но внутри элемент PasswordBox использует исключительно объект System.Security.String.
SecureString — это текстовый объект, подобный обычной строке, но он хранится в памяти в зашифрованном виде. Ключ, который используется для шифрования строки, генерируется случайным образом и хранится в той части памяти, которая никогда не записывается на диск. Поэтому даже если произойдет поломка компьютера, злоумышленники не смогут извлечь данные пароля из файла подкачки страниц. В крайнем случае они найдут лишь зашифрованную форму.
Класс SecureString также имеет возможность освобождения по запросу. При вызове метода SecureString.Dispose() данные пароля, находящиеся в памяти, перезаписываются. Это гарантирует, что вся информация о пароле будет стерта из памяти, и никто не сможет ею воспользоваться. Естественно, PasswordBox вызывает метод Dispose() для хранимого объекта SecureString при уничтожении элемента управления.