Silverlight 3中的剪贴板支持

3

我正在考虑开发一个Silverlight应用程序,在DataGrid中显示大量信息。

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

在Silverlight 3中是否可能实现这一点?

3个回答

2

好的,我已经想出了如何做到这一点,但并不十分优雅。

首先,我从Jeff Wilcox的博客中复制了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 块。

但是,是的,通过剪贴板将数据网格内容复制到 Excel 是可能的。有点像。


Flash的黑客行为相当疯狂,但感谢您提供链接。我希望在未来的Silverlight版本中添加更好的剪贴板支持,这对于高级网格和其他控件非常有用。 - Jeff Wilcox

2

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接