创建按钮模板

时间:2012-05-22 16:55:44

标签: c# wpf templates button text

我正在尝试为按钮创建一个模板,我可以在表单上反复使用。

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" />

但遗憾的是,这不起作用。我是否应该使用其他模板将文本值传递给它?

1 个答案:

答案 0 :(得分: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>

ContentPresenterContentControl内使用时,与按钮一样,会自动附加到模板化父级的ContentContentTemplateContentTemplateSelector属性

现在,如果您想要显示的不仅仅是文字,或想要更多地自定义文字,只需将DataTemplate作为ContentTemplate直接传递给特定按钮。

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

<Button ContentTemplate="{StaticResource myButtonContentTemplate}"/>