动态绑定xaml矢量图像

时间:2010-05-10 02:15:32

标签: xaml image binding vector

我正在寻找一种在代码中动态绑定xaml图像的方法。

网上有很多例子可以展示如何在窗口的xaml中绑定png或xaml图像,或者在代码中加载png文件。

但我发现没有使用build action = page的xaml文件的示例。 XmlReader无法处理它们,因为它们被编译为baml。

LoadComponent(new Uri(“... filename.baml”)显然会加载baml但是我将它加载到什么类型的图像类中?BitmapImage(new Uri(“... filename.baml”)不会似乎工作,可能是因为它不是位图。

提前致谢。

2 个答案:

答案 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;