【问题标题】:wpf Image resources and visual studio 2010 resource editorwpf图像资源和visual studio 2010资源编辑器
【发布时间】:2011-03-02 21:27:31
【问题描述】:

我提出这个问题的动机实际上只是通过 ImageSource 的依赖属性指定要在用户控件中使用的图像。我遇到了一些涉及管理、访问和单元测试的痛点。

  • 资源编辑器是用于维护应用程序图像的好工具吗?
  • 将位图从编辑器转换为 ImageSource 的最佳方法是什么?
  • 如何从编辑器中获取资源文件名?

【问题讨论】:

  • 使用资源编辑器维护图片是什么意思?
  • 我的意思是向资源设计器添加图像,然后在需要时在那里找到它们。或者,如果这是一个坏主意,那么对于可能在多个程序集中包含图像的非平凡应用程序来说,什么是更好的主意。干杯

标签: wpf visual-studio xaml image resource-editor


【解决方案1】:

不,资源编辑器不是一个很好的工具。

在 WPF 应用程序中,最好的方法是将所有图像放在“图像”目录中,并将每个图像标记为“资源”。然后您可以直接在图像控件和其他地方引用它们。

以下是具体步骤:

  • 使用您最喜欢的位图编辑程序(Paint.NET、Photoshop 等)裁剪或调整您的图像
  • 将它们保存为 .png 文件(或 .jpg 或 .gif,如果您愿意)
  • 在您的 Visual Studio 解决方案中创建一个“Images”文件夹(或多个文件夹,但您想组织它)
  • 将图像从硬盘拖到“图像”文件夹中(或右键单击项目,选择新建 -> 现有项目并选择图像)

现在您可以在 XAML 中轻松引用您的图像:

<Image Source="Images/MyImage.png" />

或者在代码中:

var source = (BitmapSource)Application.LoadComponent(
               new Uri("Images/MyImage.png", UriKind.Relative));

您还可以在外部程序集中引用图像:

<Image Source="ReferencedAssembly;v1.0.0.1;component/Images/MyImage.png" />

代码中的内容是:

var source = (BitmapSource)Application.LoadComponent(
               new Uri("ReferencedAssembly;v1.0.0.1;component/Images/MyImage.png",
                 UriKind.Relative));

【讨论】:

  • 完美!两个问题 - (1)让构建动作成为“内容”而不是“资源”有什么实际优势? (2) 引用程序集中的代码是否只是'Application.LoadComponent("ReferencedAssembly;v1.0.0.1; component/Images/MyImage.png") as BitmapSource;'?您是否知道任何帮助代码来获取该语法(对不起,三个问题)?谢谢!
  • 看起来 Application.LoadComponent 需要一个 Uri(不是字符串)
  • 谢谢。不知何故,我总是忘记“new Uri(..., UriKind.Relative)”,直到编译器指出我的方式错误。我已经更正了答案。
  • "Resource" 将文件添加到您的 .exe 或 .dll 中。 “内容”将文件作为单独的文件存储在您的输出目录中。部署单个 .exe 文件通常更容易,但如果您有巨大的图像文件或数百个图像文件,则使用 Content 可能会更好。
  • 很好的答案!写的超级清楚。疯狂的拇指。我刚才用这个问题写了源代码。我注意到一件事:如果您的资源位于 diff 程序集(另一个类库 DLL)中,您可能希望使用以下 URI 格式:“pack://application:,,,/YourAssemblyName;component/Images/MyImage.png”我仍然对何时使用图像文件夹 + 构建操作 = 资源与资源编辑器感到困惑。另外,这里的 Build Action=Resource 和 Build Action=Embedded Resource 一样吗,因为资源是二进制数据?
猜你喜欢
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
相关资源
最近更新 更多