web-dev-qa-db-ja.com

WPFDataGridHyperLinkColumnアイテムを使用してWindowsエクスプローラーを開き、ファイルを開く

私は以下を達成したい:

2つの列を持つWPFDataGridを作成します。

最初のものには、ハイパーリンクスタイルでディレクトリへのパスを示すアイテムがあります。ハイパーリンクをクリックすると、アイテムで指定されたパスでWindowsエクスプローラーが開きます。

2つ目は、ハイパーリンクスタイルでファイルへのパスを示すアイテムがあります。ハイパーリンクをクリックすると、Windowsで定義されているデフォルトのアプリケーションでファイルが起動します。

それが正しい選択かどうかはわかりませんが、DataGridHyperlinkColumnをDataGridに追加しました。 1つの問題は、インターネットの場所を参照しないUriアイテムを追加することでした。もう1つの問題は、Webブラウザを開かない方法でクリックを処理することでした。

誰でも助けることができますか?

17
Yoni

これは普遍的に機能します:

<DataGridHyperlinkColumn Binding="{Binding Link}">
    <DataGridHyperlinkColumn.ElementStyle>
        <Style>
            <EventSetter Event="Hyperlink.Click" Handler="DG_Hyperlink_Click"/>
        </Style>
    </DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
private void DG_Hyperlink_Click(object sender, RoutedEventArgs e)
{
    Hyperlink link = (Hyperlink)e.OriginalSource;
    Process.Start(link.NavigateUri.AbsoluteUri);
}

URIがWebサイトを指している場合は、デフォルトのWebブラウザーで開かれ、フォルダーの場合はエクスプローラーで開かれ、ファイルの場合は、関連付けられているデフォルトのアプリケーションで開かれます。


自動生成された列にこれを使用するには、プロパティのタイプがUriである必要があるため、DataGridHyperlinkColumnが生成されます。次に、スタイルをDataGrid.Resourcesに配置して、イベントをフックできます。

<DataGrid.Resources>
    <Style TargetType="Hyperlink">
        <EventSetter Event="Click" Handler="DG_Hyperlink_Click"/>
    </Style>
</DataGrid.Resources>
41
H.B.