2011-10-22 10 views
5

Pracuję nad projektem, w którym luźne bity XAML (i niektóre powiązane z nimi kody IronPythona) będą dynamicznie ładowane i wykonywane przez aplikację kliencką. Klient będzie używał niestandardowej usługi WCF (i niektórych lokalnych pamięci podręcznych) do pobierania XAML, skryptów kopii zapasowych i powiązanych zasobów (ikon, obrazów itp.).Rejestrowanie niestandardowego protokołu URI do obsługi niestandardowego ładowania zasobów z XAML

Chciałbym zarejestrować niestandardowego protokołu URI/schemat, aby ułatwić dla twórców dynamicznych pakietów odwołać swoje zasoby, jak następuje:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <UserControl.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 

       <ResourceDictionary Source="custom://MyPackage/Icons.xaml" /> 
       <ResourceDictionary Source="custom://MyPackage/Styles.xaml" /> 
       <!--      ^^^^^^       --> 

      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </UserControl.Resources> 
</UserControl> 

O ile mogę powiedzieć, że może wyprowadzić niestandardowe UriParser i register it, ale to tylko połowa sukcesu. Pozostała praca polega na dostarczeniu komponentu niezbędnego do rozwiązania niestandardowego identyfikatora URI i pobrania wymaganej zawartości.

Czy jest możliwe zapewnienie lub zastąpienie funkcjonalności w WPF, aby umożliwić wywołanie mojej niestandardowej usługi danych po napotkaniu jednego z moich niestandardowych identyfikatorów URI? Lub, jeśli to niemożliwe, czy istnieje jakaś alternatywa?

Odpowiedz

3

Z tego co rozumiem, należy utworzyć klasę, która wywodzi się z WebRequest i zarejestrować ją pod numerem WebRequest.RegisterPrefix.

+0

Wiedziałem, że to musi być coś łatwego. Dziękuję Ci! –

0

Jako alternatywa, zastanawiam się, czy można utworzyć nową klasę, która dziedziczy ResourceDictionary (ponieważ nie jest sealed) i zapewniają new definicję Source. Umożliwi to przechwycenie ustawionej wartości na Source i uruchomi ją w oparciu o niestandardową UriParser. Umożliwi to również łatwą aktualizację ResourceDictionary wraz z wynikami.

+1

Może działać, jeśli Źródło jest wirtualne, ponieważ można je przesłonić. Ale jeśli użyjesz 'new', po prostu ukrywa własność klasy podstawowej i deklaruje nową. WPF nigdy nie użyje tej właściwości, ponieważ nie wie o niej. –

+0

To prawda - Myślałem, że WPF nie będzie musiał używać źródła, jeśli nowa definicja ma całą logikę potrzebną do aktualizacji ResourceDictionary z nowymi zasobami. –

Powiązane problemy