我有一个ListView数据绑定到类的ObservableCollection。我正在尝试将“复制”菜单项添加到ListView,如下所示:
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Command="{x:Static ApplicationCommands.Copy}"></MenuItem>
<MenuItem Command="{x:Static ApplicationCommands.Copy}"
CommandTarget="{Binding Path=PlacementTarget, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"></MenuItem>
</ContextMenu>
</ListView.ContextMenu>
现在,当我右键单击一个菜单项时......菜单出现但副本显示为灰色...我的教育猜测是它认为没有任何东西可以复制..但这没有意义,因为当我右键单击一个列表框项..我在技术上选择要复制的东西..然后选择列表框项,因为我正在这样做..我只是想让它复制ListView中的选定文本。
我需要做些什么才能让它发挥作用?在我的类中覆盖一个绑定到Listview的副本类?我试着用谷歌搜索而不是走得很远。
答案 0 :(得分:3)
我刚刚总结了一个适合我的例子:
<Window.CommandBindings>
<CommandBinding
Command="ApplicationCommands.Copy"
CanExecute="CommandBinding_CanExecute"
Executed="CommandBinding_Executed"/>
</Window.CommandBindings>
<Window.Resources>
<ContextMenu x:Key="MyContextMenu">
<MenuItem Header="Copy" Command="ApplicationCommands.Copy"/>
</ContextMenu>
<Style x:Key="MyItemContainerStyle" TargetType="{x:Type ListViewItem}">
<Setter Property="ContextMenu" Value="{StaticResource MyContextMenu}" />
</Style>
</Window.Resources>
<Grid>
<ListView x:Name="MyListView" ItemContainerStyle="{StaticResource MyItemContainerStyle}"/>
</Grid>
然后在后面的代码中:
// Test class with a single string property
private class MyData
{
public String Name { get; set; }
public MyData(String name)
{
Name = name;
}
public override string ToString()
{
return Name;
}
}
public MainWindow()
{
InitializeComponent();
// Create some test data
ObservableCollection<MyData> names = new ObservableCollection<MyData>();
names.Add(new MyData("Name 1"));
names.Add(new MyData("Name 2"));
names.Add(new MyData("Name 3"));
MyListView.ItemsSource = names;
}
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
Clipboard.SetText(MyListView.SelectedItem.ToString());
}
无论您是从上下文菜单中选择Copy
,还是使用Ctrl+C
答案 1 :(得分:1)
在没有重写所有内容的情况下,关于Gary的示例需要注意的是CanExecute语句的存在,它控制命令的启用/禁用。您应该更多地查看正确的命令结构,因为我认为您错过了命令的真正威力。
https://msdn.microsoft.com/en-us/library/ms753200%28v=vs.110%29.aspx