【问题标题】:Relative Uri in WPF Translates into Wrong Absolute DirectoryWPF 中的相对 Uri 转换为错误的绝对目录
【发布时间】:2023-04-01 13:40:01
【问题描述】:

我有一个具有 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

导致应用程序抛出异常:“找不到路径'[path-shown-above]'的一部分。”

在我的代码中,我没有弄乱当前目录。那么它为什么要这样做呢?

我不知道这有多相关,但抛出它的函数调用是:

_gifDecoder = new GifBitmapDecoder(this.GifSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);

其中this.GifSourceSystem.Uri 类型的属性,创建项目和设置属性的XAML 如下所示:

<local:GifImage x:Name="WaitIcon" HorizontalAlignment="Center"
        Height="100" VerticalAlignment="Center" Width="100"
        MaxWidth="100" MaxHeight="100"
        GifSource="InterfaceGraphics/Wait.gif"/>

【问题讨论】:

    标签: c# wpf xaml uri


    【解决方案1】:

    默认情况下,工作目录是包含可执行文件的目录。 Visual Studio 生成的可执行文件位于项目的 bin/Debug(或 bin/Release)子文件夹中,因此这是您的工作目录。由于绝对路径是工作目录和相对路径的组合,所以您看到的完全正常。

    您有多种选择:

    • 在您希望在可执行文件目录中可用的项目项上将“复制到输出目录”属性设置为 true
    • 将项目调试属性中的工作目录更改为项目目录,而不是输出目录
    • 将图像作为资源嵌入到您的应用中(您需要相应地更改代码以加载图像)

    顺便说一句,如果你想显示动画 GIF 图像,你可以使用我的 WpfAnimatedGif 库,它就是这样做的。也是available as a NuGet package

    【讨论】:

    • 天哪。多么愚蠢的时刻。我是如何忘记项目与构建现象的? :p 尽管如此,我还是尝试将图像文件设置为资源,并在代码中相应地引用它。我应该发布另一个关于此的问题,因为我按照 MS 文档、教程等中的指示做了所有事情......它只是不停地对我大喊 Uri 是空的。
    • 我也打算试试你的图书馆。问题:它是否处理 gif 帧持续时间/偏移量/等。或者它只是假设像 IE 和其他此类微软应用程序那样的恒定帧速率?
    • @FireWingLead,是的,它几乎可以处理有关 GIF 动画的所有内容,包括帧持续时间、部分帧、各种帧处理方法等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 2016-11-02
    • 2022-01-17
    相关资源
    最近更新 更多