我正在开发一个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
答案 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.这是写的吗? :)