代码之家  ›  专栏  ›  技术社区  ›  Eric Schoonover thSoft

将一个xaml文件的内容内联导入并呈现到另一个xaml文件中?

  •  0
  • Eric Schoonover thSoft  · 技术社区  · 14 年前

    我有一个从expression design导出的xaml文件。我想把这个xaml内容内联到我的一个用户控件中。我是否可以引用要作为要在其中呈现的用户控件上的资源包含的外部xaml文件?或者,是否有其他标记可用于标识项目中要在当前位置呈现的xaml对象?

    我在用Silverlight 4。

    2 回复  |  直到 14 年前
        1
  •  1
  •   WiredPrairie    14 年前

    可以将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;
    

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

    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>
    ...
    
        2
  •  1
  •   Jeff Wilcox    14 年前

    如果只是来自用户控件或网格、控件模板或数据模板的资源部分的一堆内容,则可以使用 merged resource dictionaries 包括在内。

    否则,如果它是实际的xaml内容,则需要将其全部放入一个用户控件或内容控件(可以包括在内),但不能直接包括xaml文件,需要将其复制并粘贴到中。