我有:
XAML用于将WPF文本框添加到用户控件:
<UserControl x:Class="TestElementHost.SpellBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="248" d:DesignWidth="250">
<Grid>
<TextBox Name="txtWPF" />
</Grid>
</UserControl>
这是表单代码(VS设计器文件中添加的按钮):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TestElementHost
{
public partial class Form1 : Form
{
private System.Windows.Forms.Integration.ElementHost elementHost1;
private SpellBox spellBox1;
public Form1()
{
InitializeComponent();
this.elementHost1 = new System.Windows.Forms.Integration.ElementHost();
this.spellBox1 = new TestElementHost.SpellBox();
this.elementHost1.Location = new System.Drawing.Point(27, 12);
this.elementHost1.Name = "elementHost1";
this.elementHost1.Size = new System.Drawing.Size(269, 296);
this.elementHost1.TabIndex = 0;
this.elementHost1.Text = "elementHost1";
this.elementHost1.Child = this.spellBox1;
this.Controls.Add(this.elementHost1);
}
private void Form1_Load(object sender, EventArgs e)
{
spellBox1.txtWPF.SpellCheck.IsEnabled = true;
spellBox1.txtWPF.SpellCheck.CustomDictionaries.Add(new Uri(Application.StartupPath + @"\MyDictionary.lex"));
}
private void button1_Click(object sender, EventArgs e)
{
spellBox1.txtWPF.Text = "my bbad word."; // bbad is in the CustomDictionary
}
private void button2_Click(object sender, EventArgs e)
{
spellBox1.txtWPF.IsEnabled = false;
spellBox1.txtWPF.IsEnabled = true;
// spellBox1.txtWPF.SpellCheck.IsEnabled = false;
// spellBox1.txtWPF.SpellCheck.IsEnabled = true;
}
}
}
这很愉快,CustomDictionary中的单词被忽略,直到我尝试更改IsEnabled,IsReadOnly或Visibility属性。例如,将IsReadOnly设置为true,然后再次直接返回false,突然重新定义了customdictionary中的单词。
当我需要允许用户编辑控件中的文本时,我绕过这个方法是将SpellCheck.IsEnabled设置为false然后在连续行上返回true。这似乎使定制词典重新发挥作用。
还有其他人有这个问题吗?这是一个错误还是我错过了什么?
答案 0 :(得分:2)
它看起来像一个“功能”(感谢验证这个Joachim):
如果您使用自定义词典,然后更改WPF文本框或用户控件的可见性,启用或只读属性,拼写检查器将忽略自定义词典。
要解决此问题,请禁用然后重新启用拼写检查。
这适用于dot net运行时v4.0.30319