Textbox SpellCheck.IsEnabled - 如何计算

时间:2014-09-11 19:21:49

标签: c# wpf

我的文本框需要计算出文本框中出现的拼写错误数量。

我的研究向我展示了如何使用

来解决拼写错误
<TextBox Text="{Binding Content}" SpellCheck.IsEnabled="True" Language="en-GB" />

我有些恼火,我无法IsReadOnly设置为真,但我想我必须忍受它。

我能找到的是如何知道文本框中有多少拼写错误/错误。我所能找到的只是http://msdn.microsoft.com/en-us/library/system.windows.controls.spellcheck%28v=vs.110%29.aspx并没有说它确实如此,但我并没有失去希望!

我尝试添加

        TextBox tx = new TextBox();
        tx.SpellCheck.IsEnabled = true;
        tx.Text = "saf and tre";

        var split = tx.Text.Split(' ');
        var errors = 0;
        foreach (var s in split)
        {
            var tempTb = new TextBox();
            tempTb.Text = s;

            SpellingError e = tempTb.GetSpellingError(0); // always null
            var a = tempTb.GetSpellingErrorLength(0);
            var b = tempTb.GetSpellingError(0);
            var c = tempTb.GetSpellingErrorStart(0);

            if ( tempTb.GetSpellingErrorLength(0) >= 0)
                errors++;
        }

如果我从

更新代码
            SpellingError e = tempTb.GetSpellingError(0); // always null

            SpellingError e = tx.GetSpellingError(0); // not null

然后它会提供建议,然后通知我它错了(我可以执行计数)。

要解决我必须做的问题

        TextBox tx = new TextBox();
        tx.SpellCheck.IsEnabled = true;
        tx.Text = "saf many tre further more i sense taht nothing is what is";

        var split = tx.Text.Split(' ');
        var errors = 0;
        var start = 0;
        foreach (var s in split)
        {
            var tempTb = new TextBox();
            tempTb.Text = s;                

            SpellingError f = tx.GetSpellingError(start);

            start += s.Length + 1;

            if (f!=null)
                errors++;
        }

为什么它不能用于tempTb?

2 个答案:

答案 0 :(得分:2)

从调试中可以看出@EdSF是正确的,并且必须为临时SpellCheck.IsEnabled

设置TextBox

用于重现此代码的代码:

void initTest()
{
    TextBox tx = new TextBox();
    tx.SpellCheck.IsEnabled = true;
    tx.Text = "saf and tre";

    var split = tx.Text.Split(' ');
    var errors = 0;
    foreach (var s in split)
    {
        var tempTb = new TextBox();
        tempTb.SpellCheck.IsEnabled = true;  // Added this line
        tempTb.Text = s;

        SpellingError e = tempTb.GetSpellingError(0); // no longer always null
        var a = tempTb.GetSpellingErrorLength(0);
        var b = tempTb.GetSpellingError(0);
        var c = tempTb.GetSpellingErrorStart(0);

        //if (tempTb.GetSpellingErrorLength(0) >= 0)  //doesn't appear to be correct 
        if (e != null)
        {
            errors++;
        }
    }
}

答案 1 :(得分:0)

我发布

后发现了它

GetSpellingErrorStart()
GetSpellingError()
GetSpellingErrorLength()
SpellingError e = tempTb.GetSpellingError(0);

EG

        TextBox tx = new TextBox();
        tx.SpellCheck.IsEnabled = true;
        tx.Text = "saf";
        var reslt = tx.GetSpellingErrorStart(0);