【发布时间】:2015-11-21 11:22:54
【问题描述】:
我有一个用户类,其中包含一些字符串和 int 类型的字段,我有一个显示这些字段的数据网格,我希望用户能够选择一行并按 CTRL+C 将该行表示的对象复制到剪贴板,当用户按下 CTRL+V 时(当焦点位于数据网格上时)将添加数据网格的新行。 代码:
在xml中:
<DataGrid KeyDown="dgKeyDown" SelectionMode="Single" Name="dg1"
AutoGenerateColumns="False" CanUserAddRows="True"
CopyingRowClipboardContent="dg1Users_CopyingRowClipboardContent">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="Auto" Binding="{Binding Name}"/>
<DataGridTextColumn Header="ID" Width="Auto" Binding="{Binding ID}" />
<DataGridTextColumn Header="Age" Width="Auto" Binding="{Binding Age}"/>
</DataGrid.Columns>
</DataGrid>
dg1 Items Source 设置为用户对象的可观察集合:
dg1.ItemsSource = dg1Users;
以及复制和粘贴事件:
private void dg1Users_CopyingRowClipboardContent(object sender, DataGridRowClipboardEventArgs e)
{
User a = dg1.SelectedItem as User;
if (a != null)
{
Clipboard.Clear();
Clipboard.SetData("User1", a);
}
}
private void dgKeyDown(object sender, KeyEventArgs e)
{
User a = null;
if (e.Key == Key.V && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
if(Clipboard.ContainsData("User1"))
{
a = (User)Clipboard.GetData("User1");
dg1Users.Add(a);
}
}
}
它不起作用,没有任何反应,用一些打印语句测试我发现当按下 CTRL+V 时,第二个 if 中的代码在 dgKeyDown不执行。
我做错了什么?
注意:我没有使用 MVVM 模式。
【问题讨论】: