【问题标题】:Show ContextMenu only when Right clicked mouse is over on a specific datagridrow WPF C#仅当右键单击鼠标悬停在特定的 datagridrow WPF C# 上时才显示 ContextMenu
【发布时间】: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>

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

【问题讨论】:

    标签: c# wpf datagrid contextmenu datagridrow


    【解决方案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:什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2013-01-04
    相关资源
    最近更新 更多