"Hyperlink.Click" 没有为 DataGridHyperlinkColumn 触发事件
"Hyperlink.Click" event not being fired for DataGridHyperlinkColumn
我有一个 WPF 表单,其中 DataGrid
包含多个 DataGridHyperlinkColumn
,并设置了 Hyperlink.click
处理程序。
GamesGrid.xaml:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SteamWishlist"
x:Name="gamesGridControl" x:Class="MyProgram.GamesGrid"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" CanUserSortColumns="False" SelectionUnit="Cell" SelectionMode="Single" AreRowDetailsFrozen="True" CanUserResizeRows="False" >
<DataGrid.Columns>
<DataGridHyperlinkColumn ClipboardContentBinding="{x:Null}" Binding="{Binding Url}" ContentBinding="{Binding Name}" Header="Name">
<DataGridHyperlinkColumn.ElementStyle>
<Style>
<EventSetter Event="Hyperlink.Click" Handler="DG_Hyperlink_Click"/>
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
<DataGridHyperlinkColumn ClipboardContentBinding="{x:Null}" Binding="{Binding InstallLink}" Header="Install">
<DataGridHyperlinkColumn.ElementStyle>
<Style>
<EventSetter Event="Hyperlink.Click" Handler="DG_Hyperlink_Click"/>
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
GamesGrid.xaml.cs:
public partial class GamesGrid : UserControl
{
...
private void DG_Hyperlink_Click(object sender, RoutedEventArgs e)
{
Hyperlink link = (Hyperlink)e.OriginalSource;
Process.Start(link.NavigateUri.AbsoluteUri);
}
}
几周前这段确切的代码工作得很好,但今天事件突然没有被触发 - 如果我在 DH_Hyperlink_Click
中设置断点,它永远不会到达。
我什至不知道从哪里开始调试这个问题。以前有其他人遇到过这个吗?
当然,问题原来是另一个完全随机的 WPF 错误,唉。
显然,如果您在 TextBox.LostKeyboardFocus
回调中的 await
之后设置 DataGrid.ItemSource
,它会中断 DataGridHyperlinkColumn.Hyperlink.Click
事件。为什么?我不知道。
我尝试了所有我能想到的方法来解决这个问题,但没有任何效果。最后我不得不停止在回调中使用 await
并手动处理异步事件。唉。
我有一个 WPF 表单,其中 DataGrid
包含多个 DataGridHyperlinkColumn
,并设置了 Hyperlink.click
处理程序。
GamesGrid.xaml:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SteamWishlist"
x:Name="gamesGridControl" x:Class="MyProgram.GamesGrid"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" CanUserSortColumns="False" SelectionUnit="Cell" SelectionMode="Single" AreRowDetailsFrozen="True" CanUserResizeRows="False" >
<DataGrid.Columns>
<DataGridHyperlinkColumn ClipboardContentBinding="{x:Null}" Binding="{Binding Url}" ContentBinding="{Binding Name}" Header="Name">
<DataGridHyperlinkColumn.ElementStyle>
<Style>
<EventSetter Event="Hyperlink.Click" Handler="DG_Hyperlink_Click"/>
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
<DataGridHyperlinkColumn ClipboardContentBinding="{x:Null}" Binding="{Binding InstallLink}" Header="Install">
<DataGridHyperlinkColumn.ElementStyle>
<Style>
<EventSetter Event="Hyperlink.Click" Handler="DG_Hyperlink_Click"/>
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
GamesGrid.xaml.cs:
public partial class GamesGrid : UserControl
{
...
private void DG_Hyperlink_Click(object sender, RoutedEventArgs e)
{
Hyperlink link = (Hyperlink)e.OriginalSource;
Process.Start(link.NavigateUri.AbsoluteUri);
}
}
几周前这段确切的代码工作得很好,但今天事件突然没有被触发 - 如果我在 DH_Hyperlink_Click
中设置断点,它永远不会到达。
我什至不知道从哪里开始调试这个问题。以前有其他人遇到过这个吗?
当然,问题原来是另一个完全随机的 WPF 错误,唉。
显然,如果您在 TextBox.LostKeyboardFocus
回调中的 await
之后设置 DataGrid.ItemSource
,它会中断 DataGridHyperlinkColumn.Hyperlink.Click
事件。为什么?我不知道。
我尝试了所有我能想到的方法来解决这个问题,但没有任何效果。最后我不得不停止在回调中使用 await
并手动处理异步事件。唉。