如何对齐水平居中的WPF按钮文本?

时间:2019-05-23 00:07:01

标签: c# wpf xaml button

我有一个简单的问题,发现什么都解决不了。我在XAML WPF主窗口(Visual Studio 16.1)中有一个按钮,我只需要文本内容居中对齐即可。在设计器窗口中,如第一个图像所示,它看起来不错。当我运行窗口(调试或发布)时,我得到第二个图像(剩下的多余的图像) 边距显示只是裁剪的产物。

In Designer

Running App

就好像添加了填充。我已经进行了详尽的搜索,并尝试了很多建议,这些建议通常是在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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用 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"
        />

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

答案 2 :(得分:0)

谢谢大家的回应! 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