C# 来自常量的WPF图像源

C# 来自常量的WPF图像源,c#,wpf,image,xaml,constants,C#,Wpf,Image,Xaml,Constants,我有一些图标是我项目中的资源,我计划将这些图标用于菜单项和其他东西 我创建了一个constants类,将这些图标的位置保存在中心位置,而不是将它们硬编码到每个菜单项中 例如 如果我将此值硬编码到xaml中图像的源属性中,则效果良好。然而,如果我尝试引用这个常数,它就会失败 例如 它失败,出现以下异常:“无法将属性“Source”中的值转换为类型为“System.Windows.Media.ImageSource”的对象。” 这和我硬编码值有什么区别?有没有更好的方法在xaml中引用我的常量

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

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

例如

如果我将此值硬编码到xaml中图像的源属性中,则效果良好。然而,如果我尝试引用这个常数,它就会失败

例如


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

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

谢谢,
Alan

不同之处在于,在第一种情况下(当您硬编码路径时),XAML解析器将为您在
Source
属性中指定的字符串调用值转换器(
ImageSourceConverter
),以将其转换为
ImageSource
类型的值。而在第二种情况下,它希望常数的值已经是
ImageSource
类型

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

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


如果您想在资源字典中将图像指定为资源,在Pavlo提到的基础上有一个小小的修改。如果在资源字典中直接内联指定映像路径,则对于Windows 8 XAML,它会给出错误消息

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

要解决此问题,必须将路径指定为UriSource

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


谢谢你的回答,Pavlo。我一直在尝试让它正常工作,但仍然收到一个错误“无法转换字符串”/Project;组件/Icons/IconName.png“转换为”System.Windows.Media.Imaging.BitmapImage“对象。“。理想情况下,最好将我的常量存储为字符串,因为我在其他地方使用它们来绑定变量等。我想在此期间,我可能不得不勉强求助于硬编码。谢谢Pavlo。这就行了!我真的很感谢你的帮助。
<Window.Resources>
    <ResourceDictionary>
        <BitmapImage x:Key="IconName">/Project;component/Icons/IconName.png</BitmapImage>
    </ResourceDictionary>
</Window.Resources>
<Image Source="{StaticResource IconName}" Width="16" Height="16" />
public static readonly Uri IconName = new Uri("/Project;component/Icons/IconName.png", UriKind.Relative); 
<BitmapImage x:Key="IconName" UriSource="{x:Static pb:IconConstants.IconName}"/>
<ResourceDictionary>
  <BitmapImage x:Key="ImageFollowOnFacebook" 
               UriSource="Assets/FollowOnFacebookImage.png"/>
</ResourceDictionary>