创建按钮模板
本文关键字:按钮 创建 | 更新日期: 2023-09-27 18:35:10
我正在尝试为一个按钮创建一个模板,我可以在表单上一遍又一遍地使用。
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" />
但遗憾的是,这行不通。 我应该使用其他模板将文本值传递给它吗?
为了使它工作,有一个名为 ContentPresenter
的控件。将其放在模板中您想要的任何位置。但请记住,它可以是任何东西,文本,图像或一堆其他控件,您的Button
和控件模板都不应该关心它是什么。
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
内使用时,就像按钮一样,会自动附加到模板化父项的Content
、ContentTemplate
和ContentTemplateSelector
属性。
现在,如果您想要显示的不仅仅是文本,或者想要更多地自定义文本,只需将DataTemplate
作为您的ContentTemplate
直接传递给特定按钮即可。
<DataTemplate x:Key="myButtonContentTemplate">
<TextBlock FontSize="18" Text="{Binding}"/>
</DataTemplate>
<Button ContentTemplate="{StaticResource myButtonContentTemplate}"/>