这是DotNet 4 WPF拼写检查中的错误吗?

时间:2012-10-21 19:02:09

标签: c# wpf spell-checking

我有:

  1. 创建了一个Windows窗体项目。
  2. 创建了一个UserControl来保存WPF TextBox。
  3. 在TextBox的拼写检查中添加了CustomDictionary。
  4. 将UserControl添加到我的Windows窗体。
  5. 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。这似乎使定制词典重新发挥作用。

    还有其他人有这个问题吗?这是一个错误还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

它看起来像一个“功能”(感谢验证这个Joachim):

如果您使用自定义词典,然后更改WPF文本框或用户控件的可见性,启用或只读属性,拼写检查器将忽略自定义词典。

要解决此问题,请禁用然后重新启用拼写检查。

这适用于dot net运行时v4.0.30319