0

PlainViews のスタイルを定義しているすべてのテーマを保持する外部ライブラリがあります。viewbase を拡張する plainview クラスは、別のプロジェクトにあります。私のアプリは、プレーンビューの xaml をロードしません。PlainView に関連付けられたリソース ID が見つからないようです

プレーンビューを定義するxamlは次のとおりです

<Style x:Key="{ComponentResourceKey 
        TypeInTargetAssembly={x:Type Common:PlainView},
        ResourceId= PlainViewRsx}" 
        TargetType="{x:Type ListView}" 
        BasedOn="{StaticResource {x:Type ListBox}}">
</Style>

PlainView コード ビハインドは別のプロジェクトで定義されています。

4

1 に答える 1

0

私があなたの問題を正しく理解しているかどうか(またはあなたがまだこの問題を抱えている場合でも)わからないので、私はあなたに私のアプローチを伝えています、私は似たようなものが必要だったと思います:

  1. 外部アセンブリにテーマがあります(各テーマはリソースディクショナリとして表されます)。これは、実行時にクラスのリソースディクショナリを交換することで変更できます。
  2. リソースへのキーは別のアセンブリに保存されます
  3. テーマとリソースへのアクセスもまた別のアセンブリにあります

まず、必要なすべてのプロジェクトに必要なすべての参照があることを確認してください。

キーを格納するクラス:

public class CoreResourceKeys
{
      public static readonly string BrushMyBrush = "MyBrush";
      public static ComponentResourceKey Brush_MyBrush
      {
          get
          {
              return new ComponentResourceKey(typeof(CoreResourceKeys), CoreResourceKeys.BrushMyBrush);
          }
      }
}

私のテーマファイルは次のようになりました。

<ResourceDictionary xmlns=[...]
    xmlns:resources="clr-namespace:AssemblyThatStoresTheKeys;assembly=CoreResourceKeys">
    <SolidColorBrush x:Key="{ComponentResourceKey 
        TypeInTargetAssembly={x:Type resources:CoreResourceKeys}, 
        ResourceId={x:Static resources:CoreResourceKeys.BrushMyBrush}}"  
    Color="DarkMagenta"/>
</ResourceDictionary>

そして、ブラシを使用したい場所のコントロール/ページは次のようになりました。

<UserControl x:Class=[...] 
    xmlns:resources="clr-namespace:AssemblyThatStoresTheKeys;assembly=CoreResourceKeys">
    <TextBlock Background="{DynamicResource {x:Static resources:CoreResourceKeys.Brush_MyBrush}}" Text="The Shire"/>

そのブログ投稿は私を大いに助けました:MSDNサポートフォーラム-私のアセンブリからのスタイルのロード

それがあなたに役立つかどうかはわかりません。そうでない場合は、問題をより詳細に説明してください。

于 2012-02-08T11:45:57.333 に答える