【发布时间】:2018-05-23 01:18:05
【问题描述】:
如果我在 App.xaml 中全局启用拼写检查...
<Application.Resources>
<Style TargetType="TextBox">
<Setter Property="SpellCheck.IsEnabled"
Value="True" />
</Style>
</Application.Resources>
...然后我会在应用程序中的所有文本框中得到红色下划线和拼写检查,无论它们在哪里。
如果我想添加自定义字典,那么我必须使用类似于this SO answer中显示的代码,然后调用它如下...
public MainWindow() {
InitializeComponent();
Loaded += (_, __) => Helpers.SetCustomDictionary(this);
}
(帮助方法的代码显示在下方)
这适用于窗口首次加载时显示的文本框,但如果我有一个选项卡控件,并且默认选项卡有一个文本框,则不会应用自定义字典。
我尝试在选项卡加载时调用Helpers.SetCustomDictionary(this),但这也不起作用。我可以看到在窗口加载时调用了该方法,我的猜测是在那个阶段,选项卡的内容还没有创建,所以该方法没有找到它们来设置自定义字典。
我发现唯一有效的方法是在加载单个文本框本身时调用它。但是,这很痛苦,因为我必须为每个文本框单独执行此操作。
有谁知道如何让自定义字典适用于在窗口首次加载时不可见的文本框?
谢谢
附:这是辅助方法的代码,它使用链接的 SO 回复中显示的 FindAllChildren() 方法...
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);
}
}
}
【问题讨论】:
标签: wpf spell-checking