WPF 中的相对 uri 转换为错误的绝对目录
本文关键字:错误 转换 相对 uri WPF | 更新日期: 2023-09-27 18:30:35
我有一个属性类型为 Uri 的自定义控件。当我将此 Uri 设置为相对路径"InterfaceImages/Wait.gif"
时,我希望它在使用它打开该文件时转换为当前目录。预期的目录如下所示:
C:'Users'MyUsername'Documents'Visual Studio 2012'Projects'MySolution'MyProject'InterfaceGraphics'Wait.gif
但相反,WPF 将其修改为:
//-->Note the lowercased filenames<--//
C:'Users'MyUsername'documents'visual studio 2012'Projects'MySolution'MyProject'bin'Debug'InterfaceGraphics'Wait.gif
导致应用程序引发异常:"找不到路径'[上面显示的路径]'的一部分。
在我的代码中,我不会弄乱当前目录。那么它为什么要这样做呢?
我不知道这有多相关,但抛出它的函数调用是:
_gifDecoder = new GifBitmapDecoder(this.GifSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
其中this.GifSource
是类型 System.Uri
的属性,创建项并设置属性的 XAML 如下所示:
<local:GifImage x:Name="WaitIcon" HorizontalAlignment="Center"
Height="100" VerticalAlignment="Center" Width="100"
MaxWidth="100" MaxHeight="100"
GifSource="InterfaceGraphics/Wait.gif"/>
默认情况下,工作目录是包含可执行文件的目录。Visual Studio 生成的可执行文件位于项目的 bin/Debug(或 bin/Release)子文件夹中,因此这是您的工作目录。由于绝对路径是工作目录和相对路径的组合,因此您所看到的是完全正常的。
您有以下几种选择:
- 在要在可执行文件目录中可用的项目项上将"复制到输出目录"属性设置为 true
- 将项目调试属性中的工作目录更改为项目目录,而不是输出目录
- 将图像作为资源嵌入到应用中(需要相应地更改代码以加载图像)
顺便说一句,如果你想显示动画GIF图像,你可以使用我的WpfAnimatedGif库,它正是这样做的。它也可以作为 NuGet 包提供。