c# – WPF列表框复制到剪贴板

前端之家收集整理的这篇文章主要介绍了c# – WPF列表框复制到剪贴板前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将标准的 WPF列表框选择项(显示)文本到CTRL C上的剪贴板.有没有任何简单的方法来实现这一点.如果这是一个适用于所有的列表框的应用程序,那将是伟大的.

提前致谢.

解决方法

因为你在WPF中,所以你可以尝试附加的行为
首先你需要一个这样的课程:
public static class ListBoxBehavIoUr
{
    public static readonly DependencyProperty AutoCopyProperty = DependencyProperty.RegisterAttached("AutoCopy",typeof(bool),typeof(ListBoxBehavIoUr),new UIPropertyMetadata(AutoCopyChanged));

    public static bool GetAutoCopy(DependencyObject obj_)
    {
        return (bool) obj_.GetValue(AutoCopyProperty);
    }

    public static void SetAutoCopy(DependencyObject obj_,bool value_)
    {
        obj_.SetValue(AutoCopyProperty,value_);
    }

    private static void AutoCopyChanged(DependencyObject obj_,DependencyPropertyChangedEventArgs e_)
    {
        var listBox = obj_ as ListBox;
        if (listBox != null)
        {
            if ((bool)e_.NewValue)
            {
                ExecutedRoutedEventHandler handler =
                    (sender_,arg_) =>
                    {
                        if (listBox.SelectedItem != null)
                        {
                            //Copy what ever your want here
                            Clipboard.SetDataObject(listBox.SelectedItem.ToString());
                        }
                    };

                var command = new RoutedCommand("Copy",typeof (ListBox));
                command.InputGestures.Add(new KeyGesture(Key.C,ModifierKeys.Control,"Copy"));
                listBox.CommandBindings.Add(new CommandBinding(command,handler));
            }
        }
    }
}

那么你有这样的XAML

<ListBox sample:ListBoxBehavIoUr.AutoCopy="True">
  <ListBox.Items>
    <ListBoxItem Content="a"/>
    <ListBoxItem Content="b"/>
  </ListBox.Items>
</ListBox>

更新:对于最简单的情况,您可以通过以下方式访问文本:

private static string GetListBoxItemText(ListBox listBox_,object item_)
{
  var listBoxItem = listBox_.ItemContainerGenerator.ContainerFromItem(item_)
                    as ListBoxItem;
  if (listBoxItem != null)
  {
    var textBlock = FindChild<TextBlock>(listBoxItem);
    if (textBlock != null)
    {
      return textBlock.Text;
    }
  }
  return null;
}

GetListBoxItemText(myListBox,myListBox.SelectedItem)
FindChild<T> is a function to find a child of type T of a DependencyObject

但是就像ListBoxItem可以绑定到对象一样,ItemTemplate也可能是不同的,所以你不能依赖于真实的项目.

原文链接:https://www.f2er.com/csharp/97877.html

猜你在找的C#相关文章