ハイパーリンク列を持つ WPF DataGrid があります。
<DataGridHyperlinkColumn Binding="{Binding DocName}">
<DataGridHyperlinkColumn.ElementStyle>`
<Style>
<EventSetter Event="Hyperlink.Click" Handler="DocLink_Click" />
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
列の内容は URL ではありません。列に表示されているものとは異なる URL からダウンロードする必要があるドキュメントの名前です。
1 つのことを除いて、すべて正常に動作します。場合によっては、MessageBox
ダウンロードする前に a を表示する必要があります。これを行うSystem.IO.IOException
と、リソース (クリックされたドキュメント名) が見つからないというメッセージが表示されます。このダミー イベント ハンドラーは、毎回例外をスローします。
private void DocLink_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Crash now!");
}
これを防ぐにはどうすればよいですか?
編集
提案されたように、おもちゃのアプリでこれを試してみましたが、そこで動作しました。Page
実験の結果、イベントが( ではなく)ナビゲート可能で発生した場合にのみ、これが発生することが判明しましたWindow
。これで、次のようになりました。
アプリ.xaml:
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="NavWin.xaml">
</Application>
NavWin.xaml:
<NavigationWindow x:Class="WpfApplication1.Container"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="NavTest"
Source="MainPage.xaml">
</NavigationWindow>
MainPage.xaml:
<Page x:Class="WpfApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainPage" Height="350" Width="525">
<Grid>
<DataGrid x:Name="grid" ItemsSource="{Binding Items}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridHyperlinkColumn Binding="{Binding Name}" Header="Name">
<DataGridHyperlinkColumn.ElementStyle>
<Style>
<EventSetter Event="Hyperlink.Click" Handler="ItemLink_Click" />
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Page>
MainPage.xaml.cs:
public partial class MainPage : Page
{
...
private void ItemLink_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Crash");
}
}