2

私は、構成可能性を提供するために PRISM の初期の化身のように見えるものを使用するサードパーティ アプリケーションを拡張しています。

私は 1 つのビューのプロトタイプを作成しましたが、それは非常に簡単でした。UI をサード パーティの UI にプラグインするには、UserControl に特定のインターフェイス (IThirdPartyView など) を実装する必要がありました。

これは大丈夫でした。しかし...今は、より生産的な方法でコードを実装したいと考えています。重要なポイントの 1 つは、私が作成する UserControls は汚染されていない必要があるため、サード パーティのものに直接依存しないようにすることです。別のサードパーティに切り替える場合、コードに焼き付けられた他のサードパーティへの依存関係を持ちたくありません。

オブジェクト指向のバックグラウンドであるため、解決策は簡単だと思いました。サードパーティに依存しない別のアセンブリにUIを配置します。これを CleanUserControl と呼びましょう。次に、サード パーティ固有の実装で、クラス CleanUserControl を拡張し、その拡張されたクラスにサード パーティ固有のインターフェイスを実装させ、CleanUserControl クラスを拡張させます。クラス宣言は次のようになります。

public class SpecificUserControl : CleanUserControl, IThirdPartyView
{
    // Implementation of IThirdPartyView
}

しかし...実際には、これを達成するのに苦労しています。

私はそれをコンパイルすることができましたが、実行時にこれをヒットしました:

    コンポーネント「CustomerProfile.ThirdParty.View.SecurityView2」には
    URI「/CustomerProfile;component/view/securityview.xaml」で識別されるリソース

実際には、拡張機能でコードビハインドのみを実装し、xaml を親から継承するようにしたいと考えていますが、これが可能かどうかはわかりません。

私の質問が明確であることを願っています。説明に苦労しました。

4

1 に答える 1

2

XAML を継承することはできません。これは明示的に禁止されています。最善の方法は、コンテンツ用の共通 XAML テンプレートを作成し、それを "派生" コントロールに適用することです。テンプレートは、同じアセンブリか別のアセンブリかを問わず、好きな場所に配置できます。

もう 1 つの可能性は、親コントロールを実装することです。

  • 親コントロールを通常の XAML コントロールとして作成する
  • アセンブリをコンパイルする
  • obj フォルダーに移動します。
  • 拡張子が .g.cs のコントロールのソース コードを確認します。
  • 自動生成されたコードをコピーし、最初からやり直して純粋な C# でコントロールを作成します
于 2012-05-08T18:03:28.927 に答える