1

フォームで何度も使用できるボタンのテンプレートを作成しようとしています。

、2行のaと、一番下の行内のカスタムテキストButtonを含める必要があります。Grid

これは私がこれまでに得たものですが、ボタン要素内からテキストを設定したいので、正しくないと思います。

<ControlTemplate TargetType="Control">
    <Grid Width="444">
        <Grid.RowDefinitions>
            <RowDefinition Height="51" />
            <RowDefinition Height="36" />
        </Grid.RowDefinitions>
        <Grid Grid.Row="0" Background="#286c97"></Grid>
        <Grid Grid.Row="1" Background="#5898c0">
            <TextBlock Grid.Row="1" FontFamily="Segoe UI" FontSize="12" Text="{TemplateBinding Content}" />
        </Grid>
    </Grid>
</ControlTemplate>

次に、私が行けることを望んでいたテンプレートを呼び出すために:

<Button Content="This is the text" />

しかし悲しいことに、これは機能しません。テキスト値を渡すために使用することになっている他のテンプレートはありますか?

4

1 に答える 1

2

それを機能させるために、と呼ばれるコントロールがありContentPresenterます。テンプレート内の好きな場所に配置します。ただし、テキスト、画像、その他のコントロールの束など、何でもかまいません。Buttonまた、ControlTemplateも、それが何であるかを気にする必要はありません。

ControlTemplate TargetType="Control">
    <Grid Width="444">
        <Grid.RowDefinitions>
            <RowDefinition Height="51" />
            <RowDefinition Height="36" />
        </Grid.RowDefinitions>
        <Grid Grid.Row="0" Background="#286c97"></Grid>
        <Grid Grid.Row="1" Background="#5898c0">
            <ContentPresenter/>
        </Grid>
    </Grid>
</ControlTemplate>

、ボタンのように、のContentPresenter内部で使用すると、テンプレート化された親のプロパティとプロパティにContentControl自動的にアタッチされます。ContentContentTemplateContentTemplateSelector

ここで、テキスト以外のものを表示したい場合、またはテキストをさらにカスタマイズしたい場合は、を特定のボタンに直接渡しDataTemplateます。ContentTemplate

<DataTemplate x:Key="myButtonContentTemplate">
    <TextBlock FontSize="18" Text="{Binding}"/>
</DataTemplate>

<Button ContentTemplate="{StaticResource myButtonContentTemplate}"/>
于 2012-05-22T17:05:02.657 に答える