代码之家  ›  专栏  ›  技术社区  ›  shartte

WPF资源管理

  •  1
  • shartte  · 技术社区  · 16 年前

    由于图像都存储为Targa(TGA)文件,因此我必须将它们预处理为PNG文件。我在本地应用程序数据文件夹中执行此操作。

    我成功地尝试了将预处理的图像与应用程序的程序集放在同一个目录中,并使用“pack://siteoforigin:,,,/cache/image.png”。这也适用于VisualStudio中的XAML设计器以及Expression Blend 3。

    这种方法的问题是,应用程序的目录不必作为当前用户写入(特别是当应用程序驻留在C:\Program文件中时),因此在预处理阶段将映像存储在那里对我来说是不可能的。

    我成功使用的另一种方法是创建一个自定义WebRequest协议,如cache://并将其用于图像URL。这适用于实际应用程序,但不适用于VisualStudio的designer或Expression Blend。

    有人知道使用WPF在文件系统中引用映像的另一种好方法吗?或者通过某种方式自定义资源加载,这与通常的WPF创作解决方案兼容?

    2 回复  |  直到 16 年前
        1
  •  1
  •   shartte    16 年前

    回答我自己的问题:

    然后我可以使用:

    <Grid Background="{local:LocalImageBrush Filename=some/relative/filename.png}" />
    

    标记扩展的代码是:

    class LocalImageBrush : MarkupExtension
    {
      public string Filename { get; set; }
    
      public override object ProvideValue(IServiceProvider serviceProvider)
      {
        var result = new Uri("file:///" + ProfileDirectory.LocalDataPath + "/" + Filename);
        return new ImageBrush(new BitmapImage(result));
      }
    }
    

        2
  •  0
  •   Mart    16 年前

    您可以将图像写入%APPDATA%的可写子文件夹。你可以用它来获得路径 Environment.SpecialFolder.ApplicationData

    推荐文章