【问题标题】:Text on Button is not displayed按钮上的文字不显示
【发布时间】:2021-09-07 15:42:05
【问题描述】:

我在Windows.Resources 标签中设置了我的Buttons 样式。一切正常,除了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>

【问题讨论】:

标签: c# wpf xaml user-interface controltemplate


【解决方案1】:

当您覆盖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}"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多