У меня есть класс Пользователь с несколькими полями типа string и int, у меня есть дататус, который отображает эти поля, я хочу, чтобы пользователь мог выбрать строку и нажать CTRL + C для копирования объекта, представляемого в буфер обмена, и когда пользователь нажимает CTRL + V (когда фокус находится на datagrid) добавит новую строку в datagrid. код:Копирование в буфер обмена и вставки событий
в XAML:
<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 товары Источник установлено значение наблюдаемой совокупности объектов пользователя:
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);
}
}
}
Это не работает, ничего не происходит, тестируя несколько заявлений на печать, я обнаружил, что w hen CTRL + Нажата кнопка V, код во втором, если в dgKeyDown не выполняется.
Что я делаю неправильно?
Примечание: Я НЕ использую шаблон MVVM.