问题描述
我在 Buttons
标签中设置了 Windows.Resources
的样式。一切正常,除了 Content
没有显示。
<Window …>
<Window.Resources>
<Style targettype="Button">
<Style.Triggers>
<Trigger Property="IsMouSEOver" Value="True">
<Setter Property="Background" Value="White" />
</Trigger>
</Style.Triggers>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate targettype="Button">
<Border CornerRadius="5" BorderThickness="1" BorderBrush="#989898"
Background="{TemplateBinding Background}" />
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Background" Value="#0E121A" />
<Setter Property="Margin" Value="3" />
<Setter Property="Foreground" Value="White" />
</Style>
</Window.Resources>
<Grid>
…
<Button Grid.Row="0" Grid.Column="2" Content="Send"
Click="ButtonActivateLicense_OnClick" />
</Grid>
<Window>
解决方法
当您覆盖 Button
的默认模板时,您还必须指定一个元素来显示内容。您只需将 ContentPresenter
添加到您的 Border
即可显示内容。
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="White" />
</Trigger>
</Style.Triggers>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="5" BorderThickness="1" BorderBrush="#989898"
Background="{TemplateBinding Background}">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Background" Value="#0E121A" />
<Setter Property="Margin" Value="3" />
<Setter Property="Foreground" Value="White" />
</Style>
或者,添加一个元素并使用 TemplateBinding
来绑定内容,例如:
<ContentControl Content="{TemplateBinding Content}"/>
来自 TemplateBinding
的文档:
实现一个标记扩展,该扩展支持模板中属性的值与模板化控件上的某些其他公开属性的值之间的绑定。
当然,如果您使用不同的控件,例如 TextBlock
并将内容绑定到例如Text
,您应该知道只有文本会正确显示,不能显示任何类型的内容。
<TextBlock Text="{TemplateBinding Content}"/>