Итак, у меня есть сетка данных WPF с примерно 8 ячейками в каждой строке, я включил только одну из них для простоты, но я хотел бы, чтобы пользователь имел право щелкните эту ячейку и скопируйте содержимое в буфер обмена Windows без щелчка левой кнопкой мыши и сначала выберите его. Я пробовал много фрагментов кода, но, похоже, не могу заставить ничего работать. Каждая строка является связанным элементом.Щелкните правой кнопкой мыши и скопируйте контекстное меню на C# WPF datagrid
Большинство вещей, которые я пытался, это событие MouseRightButtonDown. Некоторые из них попытались перейти на XY-позицию, некоторые из них использовали e.OriginalSource как FrameworkElement, но я не могу заставить ничего работать. Не уверен, что из-за его DataGridHyperlinkColumn в отличие от других типов, используемых в примерах?
Я C# n00b! Любая помощь будет принята с благодарностью.
<DataGrid x:Name="eventsDataGrid" AutoGenerateColumns="False" IsReadOnly="true" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="10,143,0,0" VerticalAlignment="Top" Height="295" CanUserAddRows="False" CanUserReorderColumns="False" CanUserResizeColumns="True" CanUserSortColumns="False" BorderThickness="1" HorizontalScrollBarVisibility="Disabled" FontSize="10" Width="1003" MouseRightButtonDown="eventsDataGrid_MouseRightButtonDown">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Copy URL" Click="CopyURL">
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
<DataGridHyperlinkColumn Width="230" Header="URL" Binding="{Binding URL}" CanUserResize="False">
<DataGridHyperlinkColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ToolTip" Value="URL of website" />
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
</DataGridHyperlinkColumn.HeaderStyle>
<DataGridHyperlinkColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Foreground" Value="Black" />
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="FontSize" Value="12"/>
</Style>
</DataGridHyperlinkColumn.CellStyle>
</DataGridHyperlinkColumn>
</DataGrid.Columns>
</DataGrid>
Вы можете присвоить контекстное меню для ячеек вместо 'DataGrid' и использовать' Command 'с' CommandParameter' вместо события 'Click'. Передавая содержимое ячейки как параметр команды, все должно быть доступно для заполнения буфера обмена в коде. – grek40
Спасибо, человек, который звучит точно именно в том, что мне нужно, но я не могу понять, как назначить мое контекстное меню для ячеек, какая часть XAML теперь войдет в? Я пробовал его внутри DataGridHyperlinkColumn и DataGridHyperlinkColumn.CellStyle, похоже, не так, и я не могу найти никаких веб-примеров. Есть идеи? –
jamie
http://stackoverflow.com/questions/5200687/create-contextmenus-for-datagrid -rows Для передачи элемента в качестве параметра команды требуется несколько модификаций – michauzo