我有一个应用程序,我从数据库记录中获取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以找到标记并从中提取属性字符串,但我希望这不是必需的。
答案 0 :(得分:1)
WPF有一个内置类型转换器(ImageSourceConverter
),可将URI字符串转换为ImageSource
个对象(Image.Source
属性的类型)。如果无法从URI字符串加载图像,则转换器返回null,因此Image控件的Source
属性也将为null。
对象树中没有任何内容可以保留不可用图像的URI。在加载之前,您必须解析XAML模板,并用有效的图像URI替换无效的图像URI。