Если я глобально включаю проверку орфографии в App.xaml ...
<Application.Resources>
<Style TargetType="TextBox">
<Setter Property="SpellCheck.IsEnabled"
Value="True" />
</Style>
</Application.Resources>
... тогда я получаю красные подчеркивания и проверку орфографии во всех текстовых полях приложения, независимо от того, где они находятся.
Если я хочу добавить пользовательский словарь, я должен использовать код, подобный показанному в этом SO-ответе , а затем вызвать его следующим образом ...
public MainWindow() {
InitializeComponent();
Loaded += (_, __) => Helpers.SetCustomDictionary(this);
}
(код для вспомогательного метода показан внизу)
Это прекрасно работает для текстовых полей, которые отображаются при первой загрузке окна, но если у меня есть элемент управления с вкладками, а на вкладке по умолчанию есть текстовое поле, то пользовательский словарь не применяется.
Я пытался вызвать Helpers.SetCustomDictionary(this)
, когда вкладка загрузилась, но это тоже не сработало. Я вижу, что метод вызывается при загрузке окна, и я предполагаю, что на этом этапе содержимое вкладки не было создано, поэтому метод не находит их для установки пользовательского словаря.
Единственное, что я обнаружил, это сработало, вызывая его, когда загружалось отдельное текстовое поле. Однако это больно, так как я должен сделать это для каждого отдельного текстового поля в отдельности.
Кто-нибудь знает, как заставить настраиваемый словарь работать с текстовыми полями, которые не видны при первой загрузке окна?
Спасибо
P.S. Вот код для вспомогательного метода, который использует метод FindAllChildren()
, показанный в связанном ответе SO ...
public static void SetCustomDictionary(DependencyObject parent) {
Uri uri = new Uri("pack://application:,,,/CustomDictionary.lex");
List<TextBox> textBoxes = new List<TextBox>();
FindAllChildren(parent, ref textBoxes);
foreach (TextBox tb in textBoxes) {
if (tb.SpellCheck.IsEnabled && !tb.SpellCheck.CustomDictionaries.Contains(uri)) {
tb.SpellCheck.CustomDictionaries.Add(uri);
}
}
}