同步 WPF 对窗口上的多个控件进行拼写检查



我正在考虑更改我的拼写检查实现以使用 Syncfusion 拼写检查。 我让它大部分工作,但有一个问题和一个问题。 首先是我的测试应用程序代码。 我按照此处的示例代码进行操作,然后我想将其应用于同一窗口上的多个文本框,就像在我的实际应用程序中一样。 最后我尝试激活自定义词典。

下面是应用窗口的 XAML 代码:

<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:UserssfaustSourceReposSFTest1SyncfusionWpfApp1SyncfusionWpfApp1binDebugtestdictionary.txt"
};
var textBoxSpellEditor = new TextBoxSpellEditor((TextBox)sender);
spellChecker.PerformSpellCheckUsingContextMenu(textBoxSpellEditor);
}
}
}

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

第二个问题更是一个问题。 我没有看到任何表明自定义词典正在工作的内容。 我在显示的路径上创建了文件,并在其中放置了一些随机的"单词",它(正确(将其识别为拼写错误,但即使在将它们放入该文件并设置自定义字典路径属性后,它仍然将它们识别为拼写错误。 我在上下文菜单上也没有"添加到词典"选项。 我还尝试只设置属性而不实际创建文件,以防它想要创建文件本身但没有更改。 最后,我尝试了相对路径和绝对路径,但也没有变化。 关于如何激活自定义词典,我缺少什么吗?

感谢您联系 Syncfusion 支持。

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

无需每次都为SfSpellChecker创建新实例,而是可以在作为控件属性的ControlToSpellCheck中传递当前文本框控件。之后,您可以拨打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:CustomDictionaryCustomDict.txt", FileMode.Open); 
spellChecker.GetType().GetField("checker", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(spellChecker, new SpellCheckerBase(fileStream  ) );

最新更新