复制ListView控件的上下文菜单

时间:2008-11-04 20:31:02

标签: wpf

在WPF中向ListView控件添加“复制到剪贴板”功能的最佳方法是什么?

我尝试将ApplicationCommands.Copy添加到ListView ContextMenu或ListViewItem ContextMenu,但该命令仍然处于禁用状态。

谢谢, 彼得

以下是我尝试过的一个xaml示例......

 <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>

在这种情况下我应该如何设置CommandTarget?

谢谢,彼得

2 个答案:

答案 0 :(得分:4)

看起来你需要一个CommandBinding。

以下是我可能会去做你想做的事情。

<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>

答案 1 :(得分:1)

也可以通过附加属性实现此功能,正如我在blog上所描述的那样。我们的想法是使用ListView注册ApplicationCommands.Copy命令,并在执行命令时从数据绑定中读取值。

您也可以在博客条目中找到可下载的示例。