Ala*_*ark 3 c# wpf xaml image constants
我有一些图标是我项目中的资源,我打算将这些图标用于菜单项和其他内容.
我创建了一个常量类来将这些图标的位置保存在一个中心位置,而不是将它们硬编码到每个菜单项等中.
例如
public const string IconName = "/Project;component/Icons/IconName.png";
Run Code Online (Sandbox Code Playgroud)
如果我将此值硬编码到xaml中图像的Source属性中,它可以正常工作.但是,如果我尝试引用此常量,那么它将失败.
例如
<Image Source="{x:Static pb:IconConstants.IconName}" Width="16" Height="16" />
Run Code Online (Sandbox Code Playgroud)
它失败并出现此异常:"无法将属性'Source'中的值转换为'System.Windows.Media.ImageSource'类型的对象."
这和我刚刚硬编码的区别是什么?有没有更好的方法在xaml中引用我的常量?
谢谢,艾伦
不同之处在于,在第一种情况下(当您对路径进行硬编码时),XAML解析器将为ImageSourceConverter您在Source属性中指定的字符串调用值converter(),以将其转换为type的值ImageSource.而在第二种情况下,它期望常量的值已经是类型ImageSource.
你可以做的是你可以将所有路径放在全局ResourceDictionary:
<Window.Resources>
<ResourceDictionary>
<BitmapImage x:Key="IconName">/Project;component/Icons/IconName.png</BitmapImage>
</ResourceDictionary>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
<Image Source="{StaticResource IconName}" Width="16" Height="16" />
Run Code Online (Sandbox Code Playgroud)
如果要将路径常量存储在代码中,可以将Uri对象作为包含对象并将UriSource属性设置BitmapImage为此URI:
public static readonly Uri IconName = new Uri("/Project;component/Icons/IconName.png", UriKind.Relative);
Run Code Online (Sandbox Code Playgroud)
<BitmapImage x:Key="IconName" UriSource="{x:Static pb:IconConstants.IconName}"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4385 次 |
| 最近记录: |