如何让用户复制任意文本?

时间:2011-07-19 05:11:18

标签: windows-phone-7 clipboard user-experience

我有一个应用程序,我生成文本(大约500个字符),我希望用户有一些方法可以复制该文本以便在应用程序之外使用。

我不想对此应用使用任何功能(例如网络或联系人)。

这是我尝试过的(以及它失败的原因)

  • 文本框。 IsReadOnly = true;全选();
    • 无法选择所有只读文本框
  • 关闭只读,隐藏SIP
    • 无法在用户正在与之交互的(非只读)TextBox上隐藏SIP(我想让用户复制,因此需要与控件进行交互)
  • 允许编辑,显示sip,SelectAll()
    • 除非用户选择选择文字
    • ,否则不会显示“复制”图标
  • 选择已更改(实际更改),SelectAll()
    • 除非用户选择了文字,否则不会出现“复制”图标?复制图标显示不正常,我称之为无法接受的用户体验。

所以在这一点上,我在用户体验方面与我想要的相去甚远,而且我仍然没有任何有用的东西。有什么建议吗?

回答我问题的其他一些方法包括:

  • “如何强制复制按钮显示在我以编程方式选择的文本上方?”
  • “如何更改文本框中点按的选择行为?”

3 个答案:

答案 0 :(得分:0)

Afaik对Windows Phone 7剪贴板有一些限制:

  • 仅适用于TextBox,只能复制用户希望的文字
  • 文本仅在设备被锁定之前保留。如果您的设备被锁定,剪贴板将被清除

即使您尝试Clipboard.SetText Method,如果在没有用户交互的情况下调用此方法,您会注意到SecurityException。这是为了控制用户数据,以便任何流氓应用都无法复制无法识别的文本。

但你可以试试Matt Laceys WP7Clipboard。它将剪贴板内容保存在图像中,甚至可以复制位图。

答案 1 :(得分:0)

答案 2 :(得分:0)

这是我最终得到的主要工作

    private void Export(StackPanel stacker)
    {
        var exportHeader = new TextBlock();
        exportHeader.Text = "Export";
        stacker.Children.Add(exportHeader);
        var exportBox = new TextBox();
        stacker.Children.Add(exportBox);
        //exportBox.IsReadOnly = true; // hides SIP, but causes an exception with SelectAll() (pre-Mango, I haven't tried on Mango yet)
        exportBox.FontSize = 1;
        exportBox.Text = textToExport;
        exportBox.GotFocus += new System.Windows.RoutedEventHandler((send, ev) =>
        {
            ((TextBox)send).SelectAll();
        });
        exportBox.Focus();
    }

显然,使字体大小为1会产生差异,可能是因为所有文字都可以立即显示在屏幕上?谁知道呢。

我接受了这个答案,因为没有人发布更好的解决方案。我希望有一个更好的解决方案。如果你能让SIP消失,那就太棒了。