查找原始SOURCE属性值

时间:2015-05-04 03:43:23

标签: c# wpf xaml

我有一个应用程序,我从数据库记录中获取XAML模板,插入新的文本字符串和图像引用,并在窗口中显示它。

我使用此属性获取XAML文本并创建 DependencyObject

public DependencyObject ParsedXamlTree
{
    get
    {
        String xaml;
        DependencyObject theDependencyObj;

        xaml = ProcessedXaml;
        byte[] xamlData = Encoding.Unicode.GetBytes(xaml);
        using (MemoryStream ms = new MemoryStream(xamlData))
        {
            theDependencyObj = (DependencyObject)XamlReader.Load(ms);
        }
        return theDependencyObj;
    }
}

在XAML中将是图像标记。例如:

    <Image x:Name="categoryImage" 
           HorizontalAlignment="Center"  
           Height="240"  
           Margin="72,42,408,318"  
           VerticalAlignment="Center"  
           Width="320"  
           Source="SampleAssets\pacman-151558_640.png"/>

我遇到的问题是当我解析 DependencyObject 树并到达相应的 Image 对象时,字符串&#34; SampleAssets \ pacman -151558_640.png&#34;来自来源属性似乎缺失了。

我注意到当它读取并解析XAML时,WPF本身会抛出一个IO异常。这就是调用 XamlReader.Load 的行。此异常在库中捕获,因此我只在调试跟踪窗口中看到它的证据。

我猜测它正试图找到&#34; SampleAssets \ pacman-151558_640.png&#34;对于图片标记并失败。这本身很好,因为我总是认为图像源必须在运行时修补。

问题是,如何检索&#34; SampleAssets \ pacman-151558_640.png&#34;原始XAML中的字符串?在图像对象的某处我可以得到这个吗?

最糟糕的情况是自己解析XAML以找到标记并从中提取属性字符串,但我希望这不是必需的。

1 个答案:

答案 0 :(得分:1)

WPF有一个内置类型转换器(ImageSourceConverter),可将URI字符串转换为ImageSource个对象(Image.Source属性的类型)。如果无法从URI字符串加载图像,则转换器返回null,因此Image控件的Source属性也将为null。

对象树中没有任何内容可以保留不可用图像的URI。在加载之前,您必须解析XAML模板,并用有效的图像URI替换无效的图像URI。