TextBox.TextChanged事件限制为32000个字符?

时间:2015-05-22 18:09:33

标签: c# windows-phone-8

我正在开发一个Windows Phone应用程序,它使用剪贴板通过使用OnScreen键盘的TextBox Pasting-Function来交换大文本。

对我来说,好像有32000个字符限制。

PasteTextBox.TextChanged += new TextChangedEventHandler(OnTextChanged);
private void OnTextChanged(object sender, TextChangedEventArgs e)
{
    CounterTextBlock.Text = PasteTextBox.Text.Length.ToString();
}

如果我将超过32000个字符粘贴到TextBox中,代码会崩溃。 TextBox.MaxLength 0(无限制),增加它没有帮助。

这是技术限制还是我该如何防止崩溃?

更新:也许我解释不好。我再试试: 剪贴板中可能有大量文本,我想将其导入应用程序。 Clipboard.GetText在Windows Phone上被阻止,所以我绕过文本框来获取文本。如果剪贴板文本是< = 32000。

,它可以正常工作

Update2:嗯,我不确定在@ f14shm4n写完之后会发生什么事情。 这是我的完整示例:

    private void ApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        Clipboard.SetText("... Long Text with 1000 Chars ...");
        PasteTextBox.TextChanged += new TextChangedEventHandler(OnTextChanged);
    }

    private void OnTextChanged(object sender, TextChangedEventArgs e)
    {
        CounterTextBlock.Text = PasteTextBox.Text.Length.ToString();
    }

现在,如果我运行应用程序并单击文本框,则OnScreen-Display会显示粘贴符号。我可以反复按粘贴按钮,直到计数器显示32000.再次单击粘贴符号会使应用程序崩溃。它发生在Visual Studio模拟器中,也发生在我的真实Windows Phone上。 我认为它必须是粘贴机制中的一个小故障,但我也可能是完全错误的。真的只有我吗?

Update3:经过一些测试,现在看起来像是一个“变形虫”问题(äöü是德国的变形金刚)。如果我在@f14shm4n的代码之前添加以下行(!)他的Append-Loop他的代码也会崩溃:

    sb.Append("ö");

奇怪的是它不会因“ä”或“ü”而崩溃,只会与“ö”相撞。如果我在(!)Append-Loop之后移动这一行也不会崩溃。 其他人可以证实这种行为,还是只有我呢?

更新4:错误消息 System.Exception未处理 消息:System.Windows.ni.dll中出现未处理的“System.Exception”类型异常 附加信息:错误HRESULT E_FAIL已从调用COM组件返回。

- $ exception {System.Exception:错误HRESULT E_FAIL已从调用COM组件返回。    在MS.Internal.XcpImports.CheckHResult(UInt32 hr)    在MS.Internal.XcpImports.TextBox_GetRectFromCharacterIndex(DependencyObject sender,UInt32 charIndex,Boolean trailingEdge)    在System.Windows.Controls.TextBox.GetRectFromCharacterIndex(Int32 charIndex,Boolean trailingEdge)    在System.Windows.Controls.SipHelper.AdjustFrame(FrameworkElement元素,Double bottomMargin,Double& stillObscured)    在System.Windows.Controls.SipHelper.SelectionChanged(Object sender,RoutedEventArgs e)    在MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex,Delegate handlerDelegate,Object sender,Object args)    在MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj,IntPtr unmanagedObjArgs,Int32 argsTypeIndex,Int32 actualArgsTypeIndex,String eventName)} System.Exception

1 个答案:

答案 0 :(得分:1)

我在做什么:

    private void b1_Click(object sender, RoutedEventArgs e)
    {
        int count = 10000;

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < count; i++)
        {
            sb.Append(i.ToString());
        }

        DBG.WriteLine("SBLength: " + sb.Length);
        Clipboard.SetText(sb.ToString());
    }

1)此代码生成长度为38890个字符的长文本,并将其设置为剪贴板(如代码中所示)。

2)然后我点击TextBox中的可编辑区域,打开OnScreen键盘。

3)点击过去的按钮图标。

结果:剪贴板中的所有文本都粘贴在第一个TextBox中,当触发TextChanged事件时,第二个TextBox(或TextBlock nevermind)更新Text属性并显示38890.这是写的吗? :)