2011-11-20 14 views
6

È possibile ottenere Kaxaml per caricare assembly esterni utilizzando CLR-namespace, che tuttavia è un problema perché è necessario un sacco di mapping per indirizzare tutti i diversi spazi dei nomi in un assembly mentre l'abitudine XmlnsDefinition sull'assemblea consentirebbe a uno di farla franca con solo uno o pochi.Utilizzo di spazi dei nomi XML personalizzati per fare riferimento a DLL esterne in Kaxaml

Quando alla ricerca di una soluzione che, ovviamente, hanno trovato this question ma sembra solo per coprire l'uso di CLR-namespace come nessuna delle risposte sembrava funzionare per i namespace personalizzati ("Impossibile impostare membro sconosciuto ...").

Esempio:

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

Questo non funziona, se si utilizza CLR fa:

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

Il is spazio dei nomi non è usata qui e ho dovuto aggiungere un sub-spazio dei nomi l'assemblaggio delle interazioni.

Sarebbe ideale se il primo metodo potesse essere fatto funzionare.

risposta

4

Così mentre scrivevo questa domanda mi sono imbattuto in un modo per utilizzare gli spazi dei nomi personalizzati: devi far caricare Kaxaml l'assembly almeno una volta.

Questa operazione può essere eseguita utilizzando un oggetto fittizio che fa riferimento a uno spazio dei nomi CLR all'interno dell'assieme di riferimento. Se analizzato una volta che questo caricatore può essere scartato, ovviamente questo deve essere fatto ogni volta che viene eseguito Kaxaml. ad es.

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

Utilizzando frammenti o il file di default questo può essere fatto relativamente conveniente, mentre ancora non è l'ideale quindi se qualcuno conosce un buon fix per favore fatemelo sapere.

Problemi correlati