【问题标题】:Can I set a custom dictionary for all textboxes in my WPF application?我可以为我的 WPF 应用程序中的所有文本框设置自定义字典吗?
【发布时间】:2018-05-08 15:05:07
【问题描述】:

这是一个与this one 类似的问题,但我希望在被问到之后的六年内能有更好的答案。

我有一个自定义字典,我想在应用程序的所有文本框中使用它。我似乎无法设置 SpellCheck.CustomDictionaries 属性的样式,就像我可以使用 SpellCheck.IsEnabled 属性一样,我不想将设置器单独添加到每个文本框。

该问题中发布的答案需要连接到您要使用自定义字典的每个窗口的Loaded 事件。我们有一个一直在增长的大型应用程序,并且不想为每个窗口添加处理程序,也不想依赖开发人员在添加新窗口时记住添加代码。

有没有更好的方法来为整个应用程序指定一个自定义字典?谢谢。

【问题讨论】:

    标签: wpf spell-checking


    【解决方案1】:

    可能不是你想要的,但我用这个EventManager.RegisterClassHandler 来处理所有特定类型的特定事件。

    例如,这里我在MainWindow 的构造函数中向所有TextBoxes 的LoadedEvent 注册:

    EventManager.RegisterClassHandler(typeof(TextBox), FrameworkElement.LoadedEvent, new RoutedEventHandler(SetCustomDictionary), true);
    

    并定义RoutedEventHandler:

    private void SetCustomDictionary(object sender, RoutedEventArgs e)
    {
        var textBox = e.OriginalSource as TextBox;
        if (textBox != null)
        {
            textBox.SpellCheck.IsEnabled = true;
    
            Uri uri = new Uri("pack://application:,,,/MyCustom.lex");
            if (!textBox.SpellCheck.CustomDictionaries.Contains(uri))
                textBox.SpellCheck.CustomDictionaries.Add(uri);
        }
    }
    

    【讨论】:

    • 感谢您的回复,但我无法使用此代码。我没有收到任何错误,但文本框都将我的自定义词典中的单词显示为拼写错误。另外,我认为我需要在应用程序的每个窗口中执行此操作是否正确?如果是这样,它与我链接的帖子中的代码基本相同。我希望有某种方法可以设置一次,并将其应用于整个应用程序。请解释我是否弄错了。再次感谢。
    • 我没试过,但是如果你把它放在app级别一次,你可以应用到所有的窗口。我确实查看了您发布的代码,然后重新应用了 EventManager.RegisterClassHandler 方法(希望减少编写工作)。
    • 正如我所说,我实际上根本无法让代码工作,所以我不知道它是否可以在应用程序级别工作
    猜你喜欢
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多