WPF 图片来源来自constant

发布于 2024-10-19 08:31:50 字数 541 浏览 1 评论 0原文

我有一些图标是我的项目中的资源,我计划将这些图标用于菜单项和其他内容。

我创建了一个常量类来将这些图标的位置保存在中心位置,而不是将它们硬编码到每个菜单项等中。

例如,

public const string IconName = "/Project;component/Icons/IconName.png";

如果我将此值硬编码到 xaml 中图像的 Source 属性中,它就可以正常工作。但是,如果我尝试引用该常量,则会失败。

例如,

<Image Source="{x:Static pb:IconConstants.IconName}" Width="16" Height="16" />

它因以下异常而失败:“无法将属性“Source”中的值转换为“System.Windows.Media.ImageSource”类型的对象。”。

这和我只是硬编码该值有什么区别?有没有更好的方法在 xaml 中引用我的常量?

谢谢, 艾伦

I've got some icons that are resources in my project and I plan to use these icons for menu items and other things.

I've created a constants class to hold the locations of these icons in a central location rather than hardcoding them into each menu item etc.

E.g.

public const string IconName = "/Project;component/Icons/IconName.png";

If I hardcode this value into the Source property of an image in xaml it works fine. However, if I try to reference this constant then it fails.

E.g.

<Image Source="{x:Static pb:IconConstants.IconName}" Width="16" Height="16" />

It fails with this exception: "Cannot convert the value in attribute 'Source' to object of type 'System.Windows.Media.ImageSource'. ".

What is the difference between this and me just hardcoding the value? Is there a better way of referencing my constants in xaml?

Thanks,
Alan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一笔一画续写前缘 2024-10-26 08:31:50

区别在于,在第一种情况下(当您对路径进行硬编码时),XAML 解析器将为您在 Source 属性中指定的字符串调用值转换器 (ImageSourceConverter) 进行转换它为 ImageSource 类型的值。而在第二种情况下,它期望常量的值已经是 ImageSource 类型。

您可以做的是将所有路径放入全局 ResourceDictionary 中:

<Window.Resources>
    <ResourceDictionary>
        <BitmapImage x:Key="IconName">/Project;component/Icons/IconName.png</BitmapImage>
    </ResourceDictionary>
</Window.Resources>

<Image Source="{StaticResource IconName}" Width="16" Height="16" />

如果要在代码中存储路径常量,可以将 Uri 对象作为常量,并将 BitmapImageUriSource 属性设置为此 URI :

public static readonly Uri IconName = new Uri("/Project;component/Icons/IconName.png", UriKind.Relative); 

<BitmapImage x:Key="IconName" UriSource="{x:Static pb:IconConstants.IconName}"/>

The difference is that in first case (when you hardcode the path) the XAML parser will invoke a value converter (ImageSourceConverter) for the string you specify in the Source attribute to convert it to a value of type ImageSource. While in second case it expects that value of your constant will already be of type ImageSource.

What you can do is you can put all the paths in a global ResourceDictionary:

<Window.Resources>
    <ResourceDictionary>
        <BitmapImage x:Key="IconName">/Project;component/Icons/IconName.png</BitmapImage>
    </ResourceDictionary>
</Window.Resources>

<Image Source="{StaticResource IconName}" Width="16" Height="16" />

If you want to store the path constants in the code, you can have Uri objects as contants and set the UriSource property of BitmapImage to this URI:

public static readonly Uri IconName = new Uri("/Project;component/Icons/IconName.png", UriKind.Relative); 

<BitmapImage x:Key="IconName" UriSource="{x:Static pb:IconConstants.IconName}"/>
空气里的味道 2024-10-26 08:31:50

如果你想将图像指定为资源字典中的资源,则在 Pavlo 提到的基础上稍作修改。如果您直接在资源字典中内联指定图像路径,对于 Windows 8 XAML 会出现错误

“错误 1 ​​缺少元素“BitmapImage”的内容属性定义
接收内容 '/Project;component/Icons/IconName.png'

要解析它,您必须将路径指定为 UriSource。

<ResourceDictionary>
  <BitmapImage x:Key="ImageFollowOnFacebook" 
               UriSource="Assets/FollowOnFacebookImage.png"/>
</ResourceDictionary>

If you want to specify image as a resource in resource dictionary, there is a slight modification on top of what Pavlo mentioned. If you specify image path directly inline in the resource dictionary, for Windows 8 XAML it gives error

"Error 1 Missing Content Property definition for Element 'BitmapImage'
to receive content '/Project;component/Icons/IconName.png'

To resolve it, you will have to specify path as UriSource.

<ResourceDictionary>
  <BitmapImage x:Key="ImageFollowOnFacebook" 
               UriSource="Assets/FollowOnFacebookImage.png"/>
</ResourceDictionary>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文