首页 > 解决方案 > 使用来自 Xslt 处理器的参数动态加载 Xaml,发布绑定事件

问题描述

一个窗口加载一些动态 Xaml,这些 Xaml 使用 Xslt 进行转换以显示来自数据源的一些内容。因为 Xaml 是动态的,所以在加载之前我无法绑定事件 - 绑定本身没问题,但我正在努力寻找一种方法来描述源 Xaml 中的事件数据。

假设我的来源如下:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
   <xsl:variable name="myValue" select="/root/System/CustomerFirstName"/>
   <Label ##MyClick="method='myMethod', aParameter='$myValue', anotherParameter='test'"##>
      <xsl:value-of select="/root/System/CustomerFirstName" />
   </Label>
</Grid>

该代码将其通过 Xslt 处理器,如果 ## 之间的位被删除,该处理器可以完美运行。我理解为什么它不喜欢 MyClick 属性,因为它没有定义。我已经尝试添加一个附加属性,但 Xslt 解析器似乎并不知道它(也许我错过了一个连接)。我尝试添加扩展对象,但 Xslt 解析器希望在解析时调用该方法,而不是在用户单击 UI 元素时处理该位。

我想要的是 Xslt 解析器进行预处理,但保留在我的自定义标签中,以便处理任何内容:

<Label MyClick="method='myMethod', aParameter='Geoff', anotherParameter='test'"> [etc]

MyClick 内部文本的实际语法并不重要,只要 Xslt 完成后,我可以遍历生成的 Xaml 以查找任何定义了 MyClick 的节点并对内容进行自己的处理——在这种情况下绑定一个 Click 事件处理程序,然后用传递的参数做一些事情。

或许,另一种方式不是定义我的自定义行为的属性,而是 Label 元素内的子元素。我可以使用其中任何一个,例如:

<Label><MyClick><Method>wibble</Method><Parameter Name="name" Value="{$myValue}"></Parameter></MyClick></Label>

...之类的事情

非常感谢的想法。

标签: c#wpfxamlxslt

解决方案


推荐阅读