按钮上的文字不显示

问题描述

我在 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}"/>