C#WPF创建DataGrid小区的上下文菜单

问题描述 投票:0回答:1

XAML如下: <Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Window.CommandBindings> <CommandBinding Command="ApplicationCommands.Copy" Executed="CopyCommand_Executed" CanExecute="CopyCommand_CanExecute"/> </Window.CommandBindings> <Window.Resources> <ContextMenu x:Key="ctMenu" DataContext="{Binding PlacementTarget,RelativeSource={RelativeSource Self}}"> <MenuItem Header="Copy to clipboard" Command="ApplicationCommands.Copy" CommandTarget="{Binding}" CommandParameter="{Binding Text}"/> </ContextMenu> </Window.Resources> <Grid> <TabControl Name="MainTabControl"> <TabItem Name="StackPanelTab" Header="StackPanel Tab" Margin="24,-2,-28,0"> <StackPanel> <TextBlock Text="123" ContextMenu="{StaticResource ctMenu}"/> <TextBlock Text="456" ContextMenu="{StaticResource ctMenu}"/> </StackPanel> </TabItem> <TabItem Name="DataGridTab" Header="DataGrid Tab" Margin="31,-2,-35,0"> <DataGrid Name="datagrid1"> </DataGrid> </TabItem> </TabControl> </Grid> </Window>

背后的代码如下:

using System.Windows; using System.Windows.Input; namespace WpfApplication2 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); List<User> users = new List<User>(); users.Add(new User() { Id = 1, Name = "Jane"}); users.Add(new User() { Id = 2, Name = "Bob" }); datagrid1.ItemsSource = users; } private void CopyCommand_Executed(object sender, ExecutedRoutedEventArgs e) { Clipboard.SetText(e.Parameter as string); } private void CopyCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e) { if (!string.IsNullOrEmpty(e.Parameter as string)) { e.CanExecute = true; e.Handled = true; } } } public class User { public int Id { get; set; } public string Name { get; set; } } }
    

您尝试在PreviewMouseRightButtonDown

活动中做某事吗?
<Grid>
    <TabControl Name="MainTabControl">
        <TabItem Name="StackPanelTab" Header="StackPanel Tab" Margin="24,-2,-28,0">
            <StackPanel>
                <TextBlock Text="123" ContextMenu="{StaticResource ctMenu}"/>
                <TextBlock Text="456" ContextMenu="{StaticResource ctMenu}"/>
            </StackPanel>
        </TabItem>
        <TabItem Name="DataGridTab" Header="DataGrid Tab" Margin="31,-2,-35,0">
            <DataGrid 
                Name="datagrid1"
                PreviewMouseRightButtonDown="AnyCell_ContextMenuRequest">

            </DataGrid>
        </TabItem>
    </TabControl>
</Grid>
c# wpf data-binding datagrid wpf-controls
1个回答
0
投票
当我对其进行测试时,这是概念的基本证明:

private void AnyCell_ContextMenuRequest(object sender, MouseButtonEventArgs e)
{
    if (e.OriginalSource is TextBlock block)
    {
        Clipboard.SetText(block.Text);
    }
}


© www.soinside.com 2019 - 2025. All rights reserved.