2011-11-20 19 views
6

Mogę zmusić Kaxaml do załadowania zewnętrznych złożeń przy użyciu przestrzeni nazw CLR, ale jest to uciążliwe, ponieważ trzeba dużo mapowań, aby celować w różne przestrzenie nazw w zespole, podczas gdy niestandardowe XmlnsDefinition na zestawie pozwoliłoby uciec z jednym lub kilkoma.Używanie niestandardowych przestrzeni nazw XML do odwoływania się do zewnętrznych bibliotek DLL w Kaxaml

Gdy szukasz rozwiązania i oczywiście znaleźć this question ale to tylko wydaje się obejmować stosowanie nazw CLR jak żadna z odpowiedzi wydawało się działać dla niestandardowych nazw („Nie można ustawić nieznany członek ...”).

Przykład:

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

To nie będzie działać, ale jeśli używasz CLR robi:

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

Przestrzeń nazw is nie służy tu i musiałem dodać sub-przestrzeń nazw zespół interakcji.

Byłoby idealnie, gdyby pierwsza metoda mogła działać.

Odpowiedz

4

Podczas pisania tego pytania natknąłem się na jeden ze sposobów użycia niestandardowych przestrzeni nazw: Musisz zmusić Kaxaml do załadowania zespołu co najmniej raz.

Można to zrobić za pomocą jakiegoś obojętnego obiektu, który odwołuje się do przestrzeni nazw CLR w zespole referencyjnym. Jeśli parsowanie tego programu ładującego może zostać odrzucone, oczywiście należy to zrobić za każdym razem, gdy uruchamiany jest Kaxaml. np.

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

Korzystanie fragmentów lub plik domyślny to mogą być wykonane stosunkowo wygodne, a jednocześnie nie jest idealny, więc jeśli ktoś zna dobrą poprawkę proszę dać mi znać.

Powiązane problemy