gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:20:12 24 4
gpt4 key购买 nike

我正在尝试通过 CTRL+C 将标准 WPF 列表框选择的项目(显示的)文本复制到剪贴板。有什么简单的方法可以实现这一目标。如果它适用于应用程序中的所有列表框……那就太好了。

提前致谢。

最佳答案

因为你在 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 可以绑定(bind)到对象一样,ItemTemplate 也可能不同,因此您不能在实际项目中依赖它。

关于c# - WPF 列表框复制到剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com