6

我可以让 Kaxaml 使用 CLR 命名空间加载外部程序集,但这很痛苦,因为需要大量映射来定位程序集中的所有不同命名空间,而程序集上的自定义 XmlnsDefinition 将只允许一个人逃脱或几个。

在寻找解决方案时,我显然发现了这个问题,但它似乎只涵盖了 CLR 命名空间的使用,因为没有一个答案似乎适用于自定义命名空间(“无法设置未知成员......”)。

例子:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
  xmlns:is="http://schemas.microsoft.com/expression/2010/interactions">
<!-- ... -->
<Button Content="Test">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <is:ChangePropertyAction PropertyName="IsOpen"
                                TargetName="popup"
                                Value="True" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

这将不起作用,但是如果您使用 CLR,它会:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
  xmlns:is="clr-namespace:Microsoft.Expression.Interactions;assembly=Microsoft.Expression.Interactions"
  xmlns:isc="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions">
<!-- ... -->
<Button Content="Test">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <isc:ChangePropertyAction PropertyName="IsOpen"
                                TargetName="popup"
                                Value="True" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

这里is没有使用命名空间,我必须添加交互程序集的子命名空间。

如果可以使第一种方法起作用,那将是理想的。

4

1 回答 1

4

因此,在输入这​​个问题时,我偶然发现了一种使用自定义命名空间的方法:您必须让 Kaxaml 至少加载一次程序集。

这可以使用一些在被引用程序集中引用 CLR 命名空间的虚拟对象来完成。如果解析一次可以丢弃这个加载器,当然每次运行 Kaxaml 时都需要这样做。例如

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:is="http://schemas.microsoft.com/expression/2010/interactions">
    <Page.Resources>
        <FrameworkElement x:Key="loader"
                xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
                xmlns:is="clr-namespace:Microsoft.Expression.Interactions;assembly=Microsoft.Expression.Interactions" />
    </Page.Resources>

使用片段或默认文件可以使这相对方便,但仍然不理想,所以如果有人知道一个好的修复方法,请告诉我。

于 2011-11-20T03:21:56.497 回答