2011-11-20 10 views
6

Puedo hacer que Kaxaml cargue ensamblados externos utilizando espacios de nombres CLR, pero eso es un problema porque se necesitan muchas asignaciones para apuntar a todos los espacios de nombres diferentes en un ensamblaje mientras que el personalizado XmlnsDefinition en el ensamblado permitiría que uno salga con solo uno o unos pocos.Uso de espacios de nombres XML personalizados para hacer referencia a archivos DLL externos en Kaxaml

Al buscar una solución que, obviamente, encontró this question pero sólo parece cubrir el uso de CLR-espacios de nombres ya que ninguna de las respuestas parecía funcionar para espacios de nombres personalizados ("No se puede establecer miembro desconocido ...").

Ejemplo:

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

Esto no funcionará, sin embargo, si utiliza los CLR que hace:

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

El espacio de nombres is no se utiliza aquí y he tenido que añadir un sub-espacio de nombres de el conjunto de interacciones.

Sería ideal si se pudiera hacer que el primer método funcionara.

Respuesta

4

Por lo tanto, al escribir esta pregunta me encontré con una forma de utilizar los espacios de nombres personalizados: Tienes que hacer que Kaxaml cargue el conjunto al menos una vez.

Esto se puede hacer utilizando un objeto ficticio que hace referencia a un espacio de nombres CLR dentro del conjunto al que se hace referencia. Si se analiza una vez que este cargador se puede descartar, por supuesto, esto debe hacerse cada vez que se ejecuta Kaxaml. p.

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

El uso de fragmentos o el archivo predeterminado Esto se puede hacer relativamente conveniente mientras que todavía no es ideal por lo que si alguien conoce una buena solución por favor hágamelo saber.

Cuestiones relacionadas