在另一个XAML文件中内联导入和呈现XAML文件的内容?

时间:2010-03-26 17:20:03

标签: silverlight xaml

我有一个从Expression Design导出的XAML文件。我想在我的一个用户控件中内联呈现XAML内容。我可以引用我要在UserControl中包含的外部XAML文件作为我想要呈现它的UserControl吗?或者是否有其他标记我可以用来识别我想要在当前位置渲染的项目中的XAML对象?

我正在使用Silverlight 4。

2 个答案:

答案 0 :(得分:1)

如果它只是用户控件或网格,控件模板或数据模板的“资源”部分中的大量内容,则可以使用merged resource dictionaries来包含它。

否则,如果它是实际的XAML内容,您需要将其全部放在用户控件或内容控件中,这可能包括在内 - 但是您不能直接包含XAML文件,您需要复制和粘贴它在。

答案 1 :(得分:1)

您可以将XAML作为内容或文件包含在Web服务器上,并使用XamlReader.Load动态加载和创建Xaml内容。没有一个控件可以直接执行您想要的操作(但是包装链接中描述的功能很简单。)

例如:

<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Path x:Name="top" Width="24" Height="12" Stretch="Fill" Fill="#FF065F02" Stroke="#10000000" Data="F1 M 0,6L 12,12L 24,6L 12,0L 0,6 Z "/>
</Canvas>

然后,使用您喜欢的任何技巧来加载内容,获取上面的字符串并加载它:

Canvas c = XamlReader.Load(myXaml) as Canvas;

然后,将画布作为子项添加到父控件(或者您想要使用的任何类型,因为它不需要是Canvas)。

var e = from a in XDocument.Load("resources.xml").Descendants("assets") 
  where (string) a.Attribute("id") == desiredId select a.FirstNode;

我在上面的案例中的Xaml位于一个标记为“Content”的文件中,并使用XDocument根据ID加载它(我的XML文档有多个自由浮动资产都标有ID):

<assets>
  <asset id="top">
    <Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
      <Path x:Name="top" Width="24" Height="12" Stretch="Fill" Fill="#FF065F02" Stroke="#10000000" Data="F1 M 0,6L 12,12L 24,6L 12,0L 0,6 Z "/>
    </Canvas>
  </a>
...