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 ) );
我正在考虑更改我的拼写检查实施以使用 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 ) );