使用 WPF DataGridHyperLinkColumn 项打开 Windows 资源管理器并打开文件

发布于 2024-11-02 21:21:27 字数 320 浏览 0 评论 0原文

我想要实现以下目标:

创建一个具有 2 列的 WPF DataGrid:

第一列将包含以超链接样式显示目录路径的项目。单击超链接将在该项目指定的路径中打开 Windows 资源管理器。

第二个将包含以超链接样式显示文件路径的项目。单击超链接将启动该文件,并使用 Windows 定义的默认应用程序。

我不知道这是否是正确的选择,但我将 DataGridHyperlinkColumn 添加到了我的 DataGrid 中。一个问题是添加不引用 Internet 位置的 Uri 项目。另一个问题是以不打开网络浏览器的方式处理点击。

有人可以帮忙吗?

I want to achieve the following:

Create a WPF DataGrid that have 2 columns:

The first will have items showing paths to directories, in a hyperlink style. Clicking on a hyperlink will open Windows Explorer in the path specified by the item.

The second will have items showing paths to files, in a hyperlink style. Clicking on a hyperlink will launch the file, with the default application defined by Windows.

I don't know if it's the right choice, but I added DataGridHyperlinkColumn's to my DataGrid. One problem was to add Uri items that do not refer to an internet locations. Another problem was to handle the clicks in a way that does not open a web browser.

Anyone can help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

宛菡 2024-11-09 21:21:27

这是通用的:

<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 浏览器打开;如果它是一个文件夹,它将在资源管理器中打开;如果它是一个文件,它将使用与其关联的默认应用程序打开。


要将其用于自动生成的列,您的属性需要为 Uri 类型,以便生成 DataGridHyperlinkColumn。然后,您可以通过将样式放置在 DataGrid.Resources 中来连接该事件:

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

This works universally:

<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);
}

If the URI points a website it will be opened with the default web-browser, if it is a folder it will be opened in explorer, if it is a file it will be opened with the default application associated with it.


To use this for autogenerated columns your property needs to be of type Uri so a DataGridHyperlinkColumn is generated. You then can hook up the event by placing the style in the DataGrid.Resources:

<DataGrid.Resources>
    <Style TargetType="Hyperlink">
        <EventSetter Event="Click" Handler="DG_Hyperlink_Click"/>
    </Style>
</DataGrid.Resources>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文