我有一个DataGrid,其模板列以超链接为模板
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink Command="{Binding Path=OpenCommand}">
<TextBlock Text="{Binding Path=Description}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
DataGrid还有一个上下文菜单,其中包含所选行的命令。当用户右键单击超链接列以外的任何其他列中的行时,将选择该行并显示上下文菜单。我遇到的问题是当用户右键单击超链接时,为了查看该行的命令,该行不会自动被选中。
问题:如何让Hyperlink忽略鼠标右键单击,让datagrid处理事件并选择行,就像在其他列中一样?
答案 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;
}