仅当右键单击鼠标悬停在特定的 datagridrow WPF C# 上时才显示 ContextMenu

Posted

技术标签:

【中文标题】仅当右键单击鼠标悬停在特定的 datagridrow WPF C# 上时才显示 ContextMenu【英文标题】:Show ContextMenu only when Right clicked mouse is over on a specific datagridrow WPF C# 【发布时间】:2022-01-15 02:12:58 【问题描述】:

我有一个带有数据网格的页面 --> 下面的 xaml 代码:

    <DataGrid x:Name="DataGrid" 
    IsReadOnly="True"
    AutoGenerateColumns="False" 
    SelectionUnit="FullRow" 
    BorderBrush="x:Null" 
    HorizontalContentAlignment="Stretch"
    ColumnWidth="Auto" Focusable="False" 
    MouseDoubleClick="DataGridArticoli_MouseDoubleClick" 
    GridLinesVisibility="None" 
    HeadersVisibility="Column" 
    UseLayoutRounding="False" 
    SelectionChanged="DataGrid_SelectionChanged">

    <!--Columns-->
    <DataGrid.Columns>
        <DataGridTextColumn col_1/>
        <DataGridTextColumn col_2/>
        <DataGridTextColumn col_3/>
        <DataGridTextColumn col_4/>
        <DataGridTextColumn col_5/>
        <DataGridTextColumn col_6/>
        <DataGridTextColumn col_7/>
        <DataGridTextColumn col_8/>
        <DataGridTextColumn col_9/>
        <DataGridTextColumn col_10/>
    </DataGrid.Columns>
    
    <DataGrid.ContextMenu>
        <ContextMenu x:Name="ContextMenu">
            <MenuItem Header="Remove" Click="Remove_ContextMenuClick">
                <MenuItem.Icon>
                    <Image Source="/resources/delete.png"/>
                </MenuItem.Icon>
            </MenuItem>
            <MenuItem x:Name="btnOpen" Header="Open" Click="Open_ContextMenuClick" IsEnabled="False">
                <MenuItem.Icon>
                    <Image Source="/resources/open.png"/>
                </MenuItem.Icon>
            </MenuItem>
        </ContextMenu>
    </DataGrid.ContextMenu>
    
</DataGrid>

在这种情况下,上下文菜单出现在鼠标的每个位置(右键单击时)。我只想在所选行中显示上下文菜单,并且仅当鼠标指针位于所选行上时。我尝试了不同的解决方案,但我没有找到合适的解决方案。有人可以帮我提供一些示例代码吗?

【问题讨论】:

【参考方案1】:

您可以将RowStyleTrigger 一起使用:

<DataGrid x:Name="DataGrid"  ...>

    <DataGrid.Resources>
        <ContextMenu x:Key="ContextMenu">
            <MenuItem Header="Remove" Click="Remove_ContextMenuClick">
                <MenuItem.Icon>
                    <Image Source="/resources/delete.png"/>
                </MenuItem.Icon>
            </MenuItem>
            <MenuItem x:Name="btnOpen" Header="Open" Click="Open_ContextMenuClick" IsEnabled="False">
                <MenuItem.Icon>
                    <Image Source="/resources/open.png"/>
                </MenuItem.Icon>
            </MenuItem>
        </ContextMenu>
    </DataGrid.Resources>

    <DataGrid.Columns>
        ...
    </DataGrid.Columns>

    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="ContextMenu" Value="StaticResource ContextMenu" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>

</DataGrid>

【讨论】:

如果您可以阅读其他帖子以及其他信息。谢谢 @Raffaele:什么?

以上是关于仅当右键单击鼠标悬停在特定的 datagridrow WPF C# 上时才显示 ContextMenu的主要内容,如果未能解决你的问题,请参考以下文章

delphi 对右键菜单的操作

仅当我将鼠标悬停在其上时如何使图像出现

如何使用 jQuery 在单击和鼠标悬停时使可滚动的 div 滚动

仅当悬停在 li 中的 span 上时才显示下拉菜单

仅当右表为空时,LEFT JOIN 才返回左表的第一行

HTML:鼠标悬停或单击时播放声音