2011-10-22 2 views
5

私は、XAMLの緩いビット(および関連するIronPythonコード)がクライアントアプリケーションによって動的にロードされて実行されるプロジェクトに取り組んでいます。クライアントは、カスタムWCFサービス(および一部のローカルキャッシング)を使用して、XAML、バッキングスクリプト、および関連リソース(アイコン、イメージなど)を取得します。XAMLからのカスタムリソース読み込みを処理するためのカスタムURIプロトコルの登録

私は次のように、そのリソースを参照するためにダイナミックパッケージの開発者にとってより簡単にするために、カスタムURIプロトコル/スキームを登録したい:私は言うことができる限り

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

、IカスタムUriParserregister itを得ることができますが、これは戦闘の半分しかないようです。残りの作業は、カスタムURIを解決して必要なコンテンツを取得するために必要なコンポーネントをすべて提供することです。

カスタムURIの1つが発生したときにカスタムデータサービスを呼び出せるように、WPFで機能を提供またはオーバーライドすることはできますか?または、これが不可能な場合は、代替手段はありますか?

答えて

3

私が理解するところでは、WebRequestから派生し、WebRequest.RegisterPrefixで登録するクラスを作成する必要があります。

+0

私はそれが何か簡単でなければならないことを知っていました。ありがとうございました! –

0

sealedではないため、ResourceDictionaryから継承する新しいクラスを作成して、Sourcenewの定義を提供できるかどうかは疑問です。これにより、値Sourceに代入され、カスタムUriParserに対して実行されます。これにより、簡単にResourceDictionaryの結果を更新することもできます。

+1

ソースをオーバーライドすることができたため、ソースが仮想だった場合はうまくいく可能性があります。しかし、 'new'を使うと、基本クラスのプロパティが隠され、新しいクラスが宣言されます。 –

+0

True - 新しい定義にResourceDictionaryを新しいリソースで更新するために必要なすべてのロジックがある場合、WPFでSourceを使用する必要はないと考えていました。 –

関連する問題