C# 在datagrid单元格上启动超链接事件处理程序单击
我有一个WPF数据网格,它有一些列。其中之一是DataGridHyperlinkColumn Datagrid的SelectedItem事件附加到我的视图模型的属性。此属性称为MySelectedItem 选中行的任何单元格时,将触发属性设置程序。Setter启动一个后台工作人员来做一些事情 此外,此属性将从视图模型更新,以便将更改传播到视图 我遇到的问题是DataGridHyperlinkColumn。我在超链接上附加了一个事件处理程序,该超链接弹出一个带有消息的自定义wpf窗口。问题出现在这里:当我单击超链接并且之前未选择该行时,将触发datagrid selecteditem事件,而不是附加到超链接的事件处理程序。附加到超链接的事件处理程序仅在先前选中该行时才会被激发 我想要的行为是:C# 在datagrid单元格上启动超链接事件处理程序单击,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,我有一个WPF数据网格,它有一些列。其中之一是DataGridHyperlinkColumn Datagrid的SelectedItem事件附加到我的视图模型的属性。此属性称为MySelectedItem 选中行的任何单元格时,将触发属性设置程序。Setter启动一个后台工作人员来做一些事情 此外,此属性将从视图模型更新,以便将更改传播到视图 我遇到的问题是DataGridHyperlinkColumn。我在超链接上附加了一个事件处理程序,该超链接弹出一个带有消息的自定义wpf窗口。问题出现在这
- 如果我点击单元格超链接,后台工作人员不应该 已启动,我的意思是,附加到datagrid selectedItem事件的事件应该 不要被解雇。在这种情况下,只应激发超链接事件处理程序。此外,不应将datagrid行标记为选中
- 否则,如果单击与超链接不同的datagrid单元格,则 应激发datagrid selectedItem事件(最后一种情况是 工作没有问题)
<Window x:Class="DataGridExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="MainWindow" Height="350" Width="525">
<Grid>
<my:DataGrid x:Name="MyDataGrid"
SelectedItem="{Binding Path=MySelectedItem}"
ItemsSource="{Binding Path=MyListOfItems}"
AutoGenerateColumns="False">
<my:DataGrid.Columns>
<my:DataGridHyperlinkColumn Header="LinkColumn"
Binding="{Binding myExtraData.LinkName}"
ContentBinding="{Binding myExtraData.LinkValue}">
<my:DataGridHyperlinkColumn.ElementStyle>
<Style TargetType="TextBlock">
<EventSetter Event="Hyperlink.Click" Handler="OnCellHyperlinkClick" />
</Style>
</my:DataGridHyperlinkColumn.ElementStyle>
</my:DataGridHyperlinkColumn>
</my:DataGrid.Columns>
</my:DataGrid>
</Grid>
</Window>
您可以处理
PreviewMouseLeftButtonDown
事件,而不是处理超链接。单击事件:
<my:DataGridHyperlinkColumn.ElementStyle>
<Style TargetType="TextBlock">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="OnCellHyperlinkClick" />
</Style>
</my:DataGridHyperlinkColumn.ElementStyle>
<my:DataGridHyperlinkColumn.ElementStyle>
<Style TargetType="TextBlock">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="OnCellHyperlinkClick" />
</Style>
</my:DataGridHyperlinkColumn.ElementStyle>
private void OnCellHyperlinkClick(object sender, RoutedEventArgs e)
{
e.Handled = true;
//handle the event as before
}