我正在寻找一种在代码中动态绑定xaml图像的方法。
网上有很多例子可以展示如何在窗口的xaml中绑定png或xaml图像,或者在代码中加载png文件。
但我发现没有使用build action = page的xaml文件的示例。 XmlReader无法处理它们,因为它们被编译为baml。
LoadComponent(new Uri(“... filename.baml”)显然会加载baml但是我将它加载到什么类型的图像类中?BitmapImage(new Uri(“... filename.baml”)不会似乎工作,可能是因为它不是位图。
提前致谢。
答案 0 :(得分:1)
此外,如果您的图像以这种格式存储在Xaml矢量文件中:
您可以按以下方式加载单个xaml矢量图像(最好是防止字典被多次添加,如果像我一样,您通过OpenFileDialog加载它):
C#:
string fullPathAndFileName =“C:\ Image_Name.xaml”; ResourceDictionary dict = new ResourceDictionary(); dict.Source = new Uri(fullPathAndFileName); Application.Current.Resources.MergedDictionaries.Add(字典);
DrawingImage image = dict [dict.Keys.Cast()。ToList()[0]]为DrawingImage; myImage.Source = image;
Xml:
图像高度=“200”宽度=“200”x:名称=“myImage”
答案 1 :(得分:0)
经过多次试验和错误搜索后,以下文章帮助了我: Access ResourceDictionary items programmatically
如果每个Xaml矢量图像都包含在一个带有密钥的ResourceDictionary中(请参阅下面的第二篇文章中的格式)......
如果您的Xaml矢量图像文件都存储在您的项目中(构建操作:页面),您可以按以下方式加载它们:
//Get the ResourceDictionary using the xaml filename:
ResourceDictionary dict = System.Windows.Application.LoadComponent(new Uri("/yourprojectname;component/youriconfolder/youriconfilename.xaml", System.UriKind.Relative)) as ResourceDictionary;
//Get the xaml as a DrawingImage out the ResourceDictionary
DrawingImage image = dict[dict.Keys.Cast<object>().ToList()[0]] as DrawingImage;
我可以返回图像并将其绑定到viewmodel属性,该属性返回iconfilename.xaml。然后我使用带有上述代码的转换器来查找图标并将其作为DrawingImage返回。 或者您可以将其指定为图像的来源(请参阅下面的第二篇文章)。
更新:2015.10.08 - 看起来卡尔没有绕过他的帖子中的“XAML格式示例”部分。 XAML看起来像这样:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DrawingImage x:Key="SomeUniqueKey">
<DrawingImage.Drawing>
<DrawingGroup>
...
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
</ResourceDictionary>
然后你可以这样做:
DrawingImage image = dict["SomeUniqueKey"] as DrawingImage;
或者,如果您更喜欢直接使用Image
,
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Image x:Key="SomeUniqueImage">
<Image.Source>
<DrawingImage>
...
</DrawingImage>
</Image.Source>
</Image>
</ResourceDictionary>
和
Image someImage = dict["SomeUniqueImage"] as Image;