Using custom XML namespaces to reference external DLLs in Kaxaml

10,980

So while typing this question i stumbled upon one way to use the custom namespaces: You have to make Kaxaml load the assembly at least once.

This can be done using some dummy object which references a CLR-namespace within the referenced assembly. If parsed once this loader can be discarded, of course this needs to be done every time Kaxaml is run. e.g.

<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>

Using snippets or the default file this can be made comparatively convenient while still not ideal so if someone knows a good fix please let me know.

Share:
10,980
H.B.
Author by

H.B.

Updated on June 04, 2022

Comments

  • H.B.
    H.B. almost 2 years

    I can get Kaxaml to load external assemblies using CLR-namespaces, that however is a pain because one needs a lot of mappings to target all the different namespaces in an assembly while the custom XmlnsDefinition on the assembly would allow one to get away with just one or a few.

    When looking for a solution i obviously found this question but it only seems to cover the use of CLR-namespaces as none of the answers seemed to work for custom namespaces ("Cannot set unknown member ...").

    Example:

    <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>
    

    This will not work, however if you use CLRs it does:

    <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>
    

    The is namespace is not used here and i had to add a sub-namespace of the interactions assembly.

    It would be ideal if the first method could be made to work.