泥庭

2011年1月6日

カスタムコントロールとGeneric.xaml(Styleその③)

Filed under: WPF — タグ: , , — yone64 @ 11:01 PM

年が明けてしまいました。今年はもっと情報発信ができるといいなぁ。

VisualStudio2010でWPFのCustomControlLibraryを作成すると、Themesフォルダ内にGeneric.xamlというファイルが作成されます。
image

このGeneric.xamlファイルでも、Styleを使用してコントロールのTemplate等を定義します。

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:CustomControlLibrary">
    <Style TargetType="{x:Type local:CustomControl1}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">

                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

基本は今までのStyleと同じですが、一点注意事項があります。

ここで指定したTargetTypeは、Classの型を基準に適用されるのではなく、

FraeworkElement.DefaultStyleKeyPropertyに指定された型をベースに適用されます。

そのため、カスタムコントロールの定義には、staticコンストラクタに次のような指定があります。

static CustomControl1()
{
    DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
}

この定義を忘れると、StyleTargetTypeが型に一致していても、Styleが適用されることはありません。

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com Blog.

%d人のブロガーが「いいね」をつけました。