8

基本的なデフォルト スタイルを持つが、必要に応じて簡単にテーマを設定できる UserControl を WPF で作成するにはどうすればよいですか?

この特定のトピックを説明する適切なガイドライン、ブログ エントリ、または例はありますか?

前もってありがとう、マルコ

4

2 に答える 2

7

WPFのテーマは、アプリケーションで使用されるコントロールに適用されるスタイルテンプレートの定義を保持するResourceDictionaryをそれぞれが含むXAMLファイルのセットです。テーマファイルは次のようになります。

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:uc="clr-namespace:MyApp.UserControls">

  <!-- Standard look for MyUserControl -->
  <Style x:Key="Standard" TargetType="{x:Type uc:MyUserControl}">
    <Setter Property="Width" Value="22" />
    <Setter Property="Height" Value="10" />
  </Style>

</ResourceDictionary>

WPFアプリケーションでのテーマのサポートは、アセンブリに次の属性を追加して明示的に有効にする必要があります。

[assembly: ThemeInfo(
  ResourceDictionary.None,
  ResourceDictionaryLocation.SourceAssembly
 )]

これにより、WPFは、themes \ generic.xamlという埋め込みリソースファイルを検索して、アプリケーションのコントロールの既定の外観を決定するように指示されます。

テーマ固有のディクショナリにアプリケーションのアセンブリとは別のファイルが含まれている場合、スタイルとテンプレートのリソースは複合キーを使用する必要があります。これにより、スタイル/テンプレートが適用されるコントロールがどのアセンブリに含まれるかがWPFに通知されます。したがって、前の例は次のように変更する必要があります。

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:uc="clr-namespace:MyApp.UserControls;assembly=MyApp">

  <!-- Standard look for MyUserControl in the MyApp assembly -->
  <Style x:Key="{ComponentResourceKey {x:Type uc:MyUserControl}, Standard}">
    <Setter Property="Width" Value="22" />
    <Setter Property="Height" Value="10" />
  </Style>

</ResourceDictionary>
于 2009-02-23T12:15:45.987 に答える
1

この記事を見てください: http://msdn.microsoft.com/en-us/magazine/cc135986.aspx

組み込みのコントロールのように、ControlTemplate で変更できるコントロールを作成する方法について説明します。

于 2009-02-23T11:55:16.740 に答える