【问题标题】:Using WPF DataGridHyperLinkColumn Items to open Windows Explorer and open files使用 WPF DataGridHyperLinkColumn Items 打开 Windows 资源管理器并打开文件
【发布时间】:2011-08-11 12:27:38
【问题描述】:

我想实现以下目标:

创建一个有 2 列的 WPF DataGrid:

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

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

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

有人可以帮忙吗?

【问题讨论】:

    标签: wpf datagrid hyperlink uri


    【解决方案1】:

    这普遍适用:

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


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

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

    【讨论】:

    • 漂亮,谢谢!顺便说一句,当列是自动生成的(在我的例子中是从数据表中)时,这是如何完成的?
    • 我在回答中添加了一些关于此的信息,但我不知道这是否适用于 DataTables,因为我从未使用过它们(您需要有一个 Uri-Property)。跨度>
    • 是否可以指定绑定以外的链接?
    • @flux:当然,你仍然会在代码中调用Process.Start 或类似的东西,你传入的内容完全取决于你。
    • @flux:可能,这不是这个问题的意义所在,所以如果你无法弄清楚,请单独询问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多