Window 上多个控件的 Syncfusion WPF 拼写检查

Syncfusion WPF Spell Check for Multiple Controls on Window

我正在考虑更改我的拼写检查实施以使用 Syncfusion 拼写检查。我已经得到它的大部分工作,但有一个问题和一个问题。首先是我的测试应用程序代码。我按照示例代码 here 进行了操作,然后我想将它应用于同一个 window 上的多个文本框,因为这就是我实际应用程序中的情况。最后我尝试激活自定义词典。

这是我的 XAML 应用代码 window:

<Window x:Class="SyncfusionWpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" Icon="App.ico">
<Grid>
    <StackPanel>
        <TextBox Loaded="tb_Loaded" />
        <TextBox Loaded="tb_Loaded" />
        <TextBox Loaded="tb_Loaded" />
    </StackPanel>
</Grid>

下面是代码:

using System.Windows;
using System.Windows.Controls;
using Syncfusion.Windows.Controls;

namespace SyncfusionWpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        void tb_Loaded(object sender, RoutedEventArgs e)
        {
            var spellChecker = new SfSpellChecker
            {
                CustomDictionaryPath =
                    @"C:\Users\sfaust\Source\Repos\SFTest1\SyncfusionWpfApp1\SyncfusionWpfApp1\bin\Debug\testdictionary.txt"
            };
            var textBoxSpellEditor = new TextBoxSpellEditor((TextBox)sender);
            spellChecker.PerformSpellCheckUsingContextMenu(textBoxSpellEditor);
        }
    }
}

好的,第一个问题。一旦我移动到多个控件,它似乎无法正常工作,除非我为每个文本框创建一个新的拼写检查器和新的 IEditorProperties(TextBoxSpellEditor class)并应用它(因此在上面加载而不是在加载中初始化它window 就像这个例子)。好吧,这似乎有效,而且效率似乎也很低。我的应用程序可能会有很多文本框,因为它们位于项目的树视图中,所以我有点担心实例化数百个拼写检查器的效率(尽管我没有尝试过压力测试所以也许我不必要地担心)。这是执行此操作的正确方法吗?

第二个问题比较麻烦。我没有看到任何表明自定义词典正在运行的信息。我在显示的路径上创建了文件,并在其中放入了一些随机的 "words",它识别(正确)为拼写错误,但即使将它们放入该文件并设置自定义字典路径 属性,它仍然识别他们拼写错误。我在上下文菜单中也没有 'AddToDictionary' 选项。我还尝试只设置 属性 而不实际创建文件,以防它想自己创建文件但没有更改。最后我尝试了相对和绝对路径,但也没有改变。关于如何激活自定义词典,我是否遗漏了什么?

感谢您联系 Syncfusion 支持。

查询 1:一旦我移动到多个控件,它似乎无法正常工作,除非我创建一个新的拼写检查器和新的 IEditorProperties

您可以在 ControlToSpellCheck 中传递当前文本框控件,而不是每次都为 SfSpellChecker 创建新实例,这是一个控件 属性。之后你可以调用PerformSpellCheckUsingContextMenu。因此,您可以通过单个实例获得拼写检查器结果。

private void OnGotFocus(object sender, RoutedEventArgs e) 
    { 
        TextBox textBox = sender as TextBox; 
        if (this.SpellEditor == null) 
        { 
            SpellEditor = new TextSpellEditor(textBox); 
        } 
        else 
            SpellEditor.ControlToSpellCheck = textBox; 
        SpellChecker.PerformSpellCheckUsingContextMenu(SpellEditor); 
    }

查询 2:我没有看到任何表明自定义词典正在运行的信息

SfSpellChecker中,我们目前不直接支持从应用程序外部加载字典文件。如果你想加载不同位置的资源文件,我们可以通过使用反射来实现这一点,并根据给定的代码片段将字典分配给拼写检查器。

例如,如果自定义词典存在于此位置。(D:\CustomDictionary\CustomDict.txt)

代码示例[C#]

Stream fileStream = new FileStream(@"D:\CustomDictionary\CustomDict.txt", FileMode.Open); 
spellChecker.GetType().GetField("checker", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(spellChecker, new SpellCheckerBase(fileStream  ) );