将ListView的项目复制到WPF中的剪贴板C#

Cri*_*ian 7 c# wpf clipboard listview

如何将WPF的ListView中的选定项目与db字段绑定到剪贴板?

谢谢Cristian

Sof*_*per 6

由于您希望显示的内容与类的属性上的数据相对,因此您需要直接从控件中获取数据.

        var sb = new StringBuilder();
        foreach(var item in this.listview1.SelectedItems)
        {
            var lvi = this.listview1.ItemContainerGenerator.ContainerFromItem(item) as ListViewItem;
            var cell = this.GetVisualChild<ContentPresenter>(lvi);
            var txt = cell.ContentTemplate.FindName("txtCodCli", cell) as TextBlock;
            sb.Append(txt.Text);
            //TODO: grab the other column's templated controls here & append text
        }
        System.Windows.Clipboard.SetData(DataFormats.Text, sb.ToString());
Run Code Online (Sandbox Code Playgroud)

这假设您的XAML中有

<TextBlock x:Name="txtCodCli" TextAlignment="Left" Text="{Binding Path=VFT_CLI_CODICE}" />
Run Code Online (Sandbox Code Playgroud)

"GetVisualChild T的地方

    public T GetVisualChild<T>(Visual parent) where T : Visual
    {
        T child = default(T);
        int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
        for (int i = 0; i < numVisuals; i++)
        {
            Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
            child = v as T;
            if (child == null)
            {
                child = GetVisualChild<T>(v);
            }
            if (child != null)
            {
                break;
            }
        }
        return child;
    }
Run Code Online (Sandbox Code Playgroud)


Ada*_*oll 5

我认为您必须监视 SelectionChanged 事件,然后以特定文本格式格式化项目,然后利用 Clipboard.SetText 方法将项目设置到剪贴板中。

http://msdn.microsoft.com/en-us/library/system.windows.clipboard.aspx

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
        foreach (var item in e.AddedItems.OfType<ListViewItem>())
        {
                Clipboard.SetText(item.ToString());
        }
}
Run Code Online (Sandbox Code Playgroud)