0

クラス ライブラリ (WPF ユーザー コントロール ライブラリ) を使用して、プロジェクト ソリューション内の他の (C#-) アプリケーションが使用するユーザー コントロールをホストします。これらのコントロールで、クラス ライブラリの最上位スコープにある XAML ControlTemplates を使用する必要があります。ControlTemplates は、クラス ライブラリの外部で使用する必要はありません。

テンプレート宣言は次のとおりです。

<ControlTemplate TargetType="{x:Type Button}" x:Key="TemplateImageButtonSmall">
    <Grid>
        <Image Name="img" Source="/PSCommonUI;component/Images/Buttons/ButtonMinus_normal.png"/>
    </Grid>
</ControlTemplate>

次に、クラス ライブラリに次のようなユーザー コントロールがあります。

<Button Height="57" Margin="10,0,6,5" Name="button3" Template="{StaticResource TemplateImageButtonSmall}" Width="82">

アプリケーションでは、App.xaml ファイルを使用してテンプレートを定義できます。ただし、クラス ライブラリにはこのオプションがありません。

Web を検索したところ、generic.xaml ファイルの使用、ComponentResourceKey、リソース ファイルのマージ、および誇張して複雑であると思われるその他のものを含むいくつかの回答が見つかりました。

また、テーマの定義 (一般的なリソース) はクラス ライブラリに常駐してはならないことも読みました。

しかし、ホストされているコントロールのために、このクラス ライブラリでのみいくつかのテーマが必要な場合、ベスト プラクティスはどのようになりますか?

前もって感謝します、

ジュリアン

4

2 に答える 2

1

あなたが何を意味しているのかわかりませんが、特定の UIElement 以下の子 UIElements でコントロール テンプレートを使用する場合は、リソース ディクショナリでテンプレートを定義し、ディクショナリが必要なトップ コントロールにディクショナリをマージできます。に見えるようにします。

編集:

アセンブリには、その中にクラスとリソースが含まれているだけです。独自のイベントはありません (OnApplicationLoaded など)。

コントロールの XAML には、それ自体と子コントロールで使用するための独自のリソース (コントロール テンプレートなど) を含めることができるため、既定のスタイルを定義できます。

アプリケーションは、リソースディクショナリをツリーの任意のレベル (アプリケーション、ウィンドウ、コントロールなど) にマージして、デフォルトをオーバーライドできます。

スタイルを動的にする (リソース ディクショナリをインポートすることでオーバーライドできる) 場合は、XAML でDynamicResourceキーワードを使用します。リソースが同じ XAML で定義されていて、オーバーライドできない場合は、StaticResourceキーワードを使用します。

于 2012-05-06T16:20:14.427 に答える
0

リソース ディクショナリをクラス ライブラリに追加し、そこでリソース (テンプレート) を定義します。generic.xaml である必要はありません。

次に、各ユーザー コントロールまたは他の .xaml ファイルで、次のような Xaml を使用して必要なリソース ディクショナリを参照します。

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="... path to dictionary 1"/>
            <ResourceDictionary Source="... path to dictionary 2"/>        
            <ResourceDictionary Source="... etc"/>
        </ResourceDictionary.MergedDictionaries>                
    </ResourceDictionary>
</UserControl.Resources>

その後、マージされた辞書のリソース キーを使用できます。

于 2012-05-06T17:28:15.000 に答える