Silverlight 3中的剪贴板支持

时间:2009-07-29 07:07:02

标签: silverlight silverlight-3.0 clipboard

我正在研究开发一个在DataGrid中显示大量信息的Silverlight应用程序。

我希望以某种方式让用户能够通过剪贴板将其复制到Excel中。

这在Silverlight 3中是否可行?

3 个答案:

答案 0 :(得分:2)

不,SL3中没有此功能。

请阅读(链接谈论版本2,但此后一直没有改变):

Copy text to clipboard?

Storing text in the clipboard using Silverlight 2

答案 1 :(得分:2)

好的,我已经想出了怎么做,但它并不完全优雅。

首先,我从Jeff Wilcox's Blog解除了CopyClipboard功能。

现在我已编写代码从网格生成HTML表格,并将其放入剪贴板。

    private void Clipboard_Button_Clicked(object sender, RoutedEventArgs e)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("<TABLE>");
        foreach (object obj in myDataGrid.ItemsSource)
        {
            sb.Append("<TR>");
            foreach (DataGridColumn c in myDataGrid.Columns)
            {
                sb.Append("<TD>");
                FrameworkElement el = c.GetCellContent(obj);
                TextBlock tb = el as TextBlock;
                if (tb != null)
                {
                    string s = tb.Text;
                    sb.Append(System.Windows.Browser.HttpUtility.HtmlEncode(tb.Text));
                }
                sb.Append("</TD>");
            }
            sb.Append("</TR>");
        }
        sb.Append("</TABLE>");
        Clipboard.SetText(sb.ToString()); 
    }

特别糟糕,因为它正在调用

clipboardData.Invoke("setData", "text", text);

而不是

clipboardData.Invoke("setData", "text/html", text);

因为第二个抛出“System.InvalidOperation”异常。这意味着如果你将它复制到Word而不是Excel,它不是一个表,它是一个HTML块。

但是,是的,可以通过剪贴板将datagrid内容复制到Excel。排序。

答案 2 :(得分:2)

我真的建议使用隐藏文本框来使用此解决方案:

http://weblogs.asp.net/manishdalal/archive/2008/11/12/cross-browser-copy-and-paste-in-datagrid-with-excel-support-part-1.aspx

我已经用它来将excel中的复制和粘贴功能转换为数据网格,并且效果非常好。

HTH