Como estás en WPF lo que podría intentar los comportamientos adjuntos
Lo primero que necesita una clase como esta:
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));
}
}
}
}
Entonces usted tiene el XAML como esto
<ListBox sample:ListBoxBehaviour.AutoCopy="True">
<ListBox.Items>
<ListBoxItem Content="a"/>
<ListBoxItem Content="b"/>
</ListBox.Items>
</ListBox>
Actualizaciones: Para el caso más simple, puede acceder al texto de la siguiente manera:
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
Pero al igual que el ListBoxItem podría estar obligado a oponerse, ItemTemplate podría ser diferente, así que no se puede confiar en él en proyectos reales.
Encontré la respuesta en http://blogs.gerodev.com/post/Copy-Selected-Items-in-WPF-Listbox-to-Clipboard.aspx. Pero aún estoy buscando una opción para agregarlo globalmente a la aplicación. – Bhuvan
El enlace de arriba en el comentario está muerto. –
@BenWalker ... bueno, eso era un enlace antiguo. La misma solución se proporciona a continuación por eagleboost – Bhuvan