WPF DataGrid中的超链接阻止选择行

时间:2012-10-24 21:01:33

标签: wpf datagrid hyperlink

我有一个DataGrid,其模板列以超链接为模板

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

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

问题:如何让Hyperlink忽略鼠标右键单击,让datagrid处理事件并选择行,就像在其他列中一样?

1 个答案:

答案 0 :(得分:2)

我不确定导致这种行为的原因,但确实很烦人。

我不知道你是否可以对Hyperlink或DataGrid做些什么来使其工作,但我认为不是。

幸运的是,有一种解决方法非常有效。

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

在XAML中添加eventhandler,如下所示:

<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;
}