2008-11-04 13 views
5

¿Cuál es la mejor manera de agregar la funcionalidad "copiar al portapapeles" a un control ListView en WPF?Copiar menú contextual para ListView Control

Intenté agregar una ApplicationCommands.Copy al ListView ContextMenu o al ListViewItem ContextMenu, pero el comando permanece deshabilitado.

Gracias, Peter

Aquí está una muestra xaml de uno de mis intentos ...

<Window.Resources> 
    <ContextMenu x:Key="SharedInstanceContextMenu" x:Shared="True"> 
     <MenuItem Header="Copy" Command="ApplicationCommands.Copy"/>    
    </ContextMenu> 
</Window.Resources> 

<ListBox Margin="12,233,225,68" Name="listBox1" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Path=UpToSourceCategoryByCategoryId.Category}" ContextMenu="{DynamicResource ResourceKey=SharedInstanceContextMenu}"/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
</ListBox> 

¿Cómo debo configurar el CommandTarget en este caso?

Gracias, Peter

Respuesta

4

Parece que necesita un CommandBinding.

Así es como probablemente haría lo que está tratando de hacer.

<Window.CommandBindings> 
    <CommandBinding 
     Command="ApplicationCommands.Copy" 
     Executed="CopyCommandHandler" 
     CanExecute="CanCopyExecuteHandler" /> 
</Window.CommandBindings> 

<Window.Resources> 
    <ContextMenu x:Key="SharedInstanceContextMenu"> 
     <MenuItem Header="Copy" Command="ApplicationCommands.Copy"/> 
    </ContextMenu> 

    <Style x:Key="MyItemContainerStyle" TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="ContextMenu" Value="{StaticResource SharedInstanceContextMenu}" /> 
    </Style> 
</Window.Resources> 

<ListBox ItemContainerStyle="{StaticResource MyItemContainerStyle}"> 
    <ListBoxItem>One</ListBoxItem> 
    <ListBoxItem>Two</ListBoxItem> 
    <ListBoxItem>Three</ListBoxItem> 
    <ListBoxItem>Four</ListBoxItem> 
</ListBox> 
+0

Gracias. Esto me lleva a donde tengo que ir. – user34403

+0

¡Me alegra ayudar! :) –

1

También es posible conseguir esta funcionalidad a través de una propiedad asociada, como he descrito en mi blog. La idea es registrar el comando ApplicationCommands.Copy con ListView y, cuando se ejecuta el comando, leer los valores de los enlaces de datos.

También encontrará una muestra descargable en la entrada del blog.

+1

El enlace al código fuente da un mensaje 406. – rozon

Cuestiones relacionadas