0

我有一个带有模板列的 DataGrid,其中包含一个超链接作为模板

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <TextBlock>
            <Hyperlink Command="{Binding Path=OpenCommand}">
                <TextBlock Text="{Binding Path=Description}" />
            </Hyperlink>
        </TextBlock>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

DataGrid 也有一个上下文菜单,其中包含所选行的命令。当用户右键单击超链接列以外的任何其他列中的行时,该行被选中并显示上下文菜单。我遇到的问题是当用户右键单击超链接时,为了查看该行的命令,该行不会自动被选中。

问题:如何让超链接忽略鼠标右键单击,让数据网格处理事件并像在其他列中一样选择行?

4

1 回答 1

2

我不确定是什么导致了这种行为,但它确实很烦人。

我不知道您是否可以对超链接或 DataGrid 做一些事情以使其工作,但我认为不能。

幸运的是,有一个很好的解决方法。

您可以订阅MouseRightButtonDownDataGridRows 上的事件,并在IsSelected引发事件时将该属性设置为 true。这样,即使您单击 ,也会选择正确的行Hyperlink

在 XAML 中添加事件处理程序,如下所示:

<DataGrid.Resources>
    <Style TargetType="DataGridRow">
        <EventSetter Event="MouseRightButtonDown" Handler="DataGridRow_MouseRightButtonDown" />
    </Style>
</DataGrid.Resources>

..并在代码隐藏设置选择:

protected void DataGridRow_MouseRightButtonDown(object sender, EventArgs e)
{
    var row = (DataGridRow)sender;
    row.IsSelected = true;
}
于 2012-11-01T13:36:34.073 回答