仅当右键单击鼠标悬停在特定的 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】:您可以将RowStyle
与Trigger
一起使用:
<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的主要内容,如果未能解决你的问题,请参考以下文章