解决方法
因为你在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也可能是不同的,所以你不能依赖于真实的项目.