0

我有 WPF 应用程序,我希望用户在其中下载将包含在应用程序中的特定文件。

在我的.csproj文件中,我有一个包含相关文件的Files 文件夹,比如Benefits.docx,在Visual Studios 的“属性”窗口中,我也设置了Build Action = ContentandCopy Always设置。

在我的 XAML 中,我有一个按钮供用户在本地下载文件:

<Button>
 <Hyperlink NavigateUri="/Files/Benefits.docx">Download</Hyperlink>
</Button>

由于什么都没发生,我还缺少什么?查看/bin文件夹,我可以看到/Files/Benefits.docx在那里。

4

1 回答 1

2

看起来您实际上并不想下载文件,而只是打开一个外部应用程序(如 Word)来显示属于您的应用程序一部分的文档。

您可以通过按钮或超链接来执行此操作,但不能同时使用两者。

使用超链接将如下所示:

<TextBlock>
    <Hyperlink NavigateUri="Files/Benefits.docx"
               RequestNavigate="Hyperlink_RequestNavigate">Open</Hyperlink>
</TextBlock>

请注意,NavigateUri 中没有前导/,这使其成为相对文件名。

事件RequestNavigate处理程序如下所示:

using System.Diagnostics;
using System.IO;
...

private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
    var path = Path.GetFullPath(e.Uri.ToString());
    Process.Start(path);
}

使用 Button 而不是 Hyperlink 可能如下所示,其中相关文件路径设置为 Button 的Tag属性,以便在 Click 事件处理程序中可用。

<Button Content="Open" Click="Button_Click" Tag="Files/Test.docx"/>

Click 事件处理程序:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var button = (Button)sender;
    var file = (string)button.Tag;
    var path = Path.GetFullPath(file);
    Process.Start(path);
}
于 2015-04-08T06:53:22.937 回答