在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?
谢谢,彼得
答案 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命令,并在执行命令时从数据绑定中读取值。
您也可以在博客条目中找到可下载的示例。