【问题标题】:How to align WPF button text centered horizontally?如何将WPF按钮文本水平居中对齐?
【发布时间】:2019-10-09 12:17:21
【问题描述】:

我有一个简单的问题,我找不到任何解决方法。我在 XAML WPF 主窗口(Visual Studio 16.1)中有一个按钮,我只需要将文本内容居中对齐。在设计器窗口上,它看起来很好,如第一张图片所示。当我运行窗口(调试或发布)时,我得到第二张图像(额外的左边 边距显示只是裁剪的产物)。

就像添加了填充一样。我已经详细搜索并尝试了很多建议,这些建议通常是在 XAML 或代码中设置 Padding 或 Horizo​​ntalContentAlignment 的某种形式,但无济于事。即使没有任何背景或边框,也没有任何效果。这是 XAML:

                <Button x:Name="btRefresh" Content="Refresh" 
                Grid.Column="2" Grid.Row="1" 
                Click="btRefresh_Click" 
                HorizontalAlignment="Stretch"
                Margin="5,0"
                Background="{StaticResource ccButton1}"
                BorderBrush="{StaticResource BorderColor1}"
                BorderThickness="2"
                FontWeight="SemiBold"
                />

我也尝试编辑默认模板,但其中没有任何会影响简单对齐的内容。除此之外,它确实在设计器中完美对齐,因此实际上没有其他属性需要根据所有文档进行设置。

我不能是唯一遇到这个的人,因为它是一个基本的按钮。

感谢您的帮助!

JCK

【问题讨论】:

  • 当你创建一个新项目并实现相同的按钮时,你能复制这个问题吗?
  • 下载并安装 snoop。然后,您可以查看到底发生了什么。该刷新字符串不只是出现。会有一个文本块来做这件事,我猜你有一个样式目标文本块。您可以在按钮中放置一个显式文本块并将其样式设置为 x:null。

标签: c# wpf xaml button


【解决方案1】:

感谢大家的回复! DRap 和 Andy 对冲突风格的看法是正确的,尤其是 Andy 在识别文本块风格方面。我的应用级文本块左边距为 10,因此我命名了该样式并将其应用于每个文本块。更改按钮样式会很好,类似于下面的,这也有效,但我无法弄清楚将其包含在其中的语法。

            <Button x:Name="btRefresh"  
                Grid.Column="2" Grid.Row="1" 
                Click="btRefresh_Click" 
                Style="{DynamicResource ButtonNrml}">
                <Button.Content>
                  <StackPanel>
                    <TextBlock Margin="0" Text="Refresh Data"/>
                  </StackPanel>
                </Button.Content>
             </Button>

但是,如果存在冲突的风格,难道不应该在设计器中显示而不是仅在运行时显示吗?

再次感谢! JCK

【讨论】:

    【解决方案2】:

    使用 VerticalContentAlignment="Center"Horizo​​ntalContentAlignment="Center" 属性

    <Button x:Name="btRefresh" Content="Refresh" 
            Grid.Column="2" Grid.Row="1" 
            Click="btRefresh_Click" 
            HorizontalAlignment="Stretch"
            Margin="5,0" VerticalContentAlignment="Center" 
            HorizontalContentAlignment="Center"
            Background="{StaticResource ccButton1}"
            BorderBrush="{StaticResource BorderColor1}"
            BorderThickness="2"
            FontWeight="SemiBold"
            />
    

    它不起作用意味着您的按钮将受到其他样式的影响。

    【讨论】:

      【解决方案3】:

      据我所见,您是否为项目中的按钮定义了另一种样式?或其他主题应用?如果是这样,也许它有一个替代的默认设置给您带来问题?我不相信蓝色背景和黑色边框是默认的?因此,我通过您将两个静态资源识别为项目中特定颜色的检测。它可能是一种潜在的风格,可能会导致您的需求失真?

      【讨论】:

      • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
      • @kkakkurt,是的,但是 cmets 只能这么长...如果我需要跟踪答案,只需编辑相同...如果我看不到他的代码它确实暴露了一些东西,这不会伤害其他有类似问题的人作为故障排除途径吗?
      猜你喜欢
      • 2014-04-20
      • 2019-01-11
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 2016-04-07
      • 1970-01-01
      相关资源
      最近更新 更多