【问题标题】:Adjust TextBlock on a Button within a Grid在网格内的按钮上调整 TextBlock
【发布时间】:2015-08-17 10:01:11
【问题描述】:

我在一个网格上有两个按钮。在右侧按钮上应该有一些文本显示为左对齐,另一个文本右对齐。到目前为止,在我所有的尝试中,两个字符串都位于按钮的中心,而不是左右。

一旦解决了这个问题,我需要在文本和按钮的左/右边框之间留一些空间。 谁能帮忙?

到目前为止,我的 XAML 代码要开始了:

<UserControl x:Class="MyNamespace.MyClass"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="900">
  <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="3*"/>
        <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <Button>
        <TextBlock Text="left button"></TextBlock>
    </Button>
    <Button Grid.Column="1">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="left"></TextBlock>
            <TextBlock Text="right" Grid.Column="1"></TextBlock>
        </Grid>
    </Button>
  </Grid>
</UserControl>

不要怪我没有把这些东西放在 ResourceDictionary 中。只是想让示例简单。

【问题讨论】:

    标签: wpf xaml button alignment textblock


    【解决方案1】:

    您需要将HorizontalContentAlignment="Stretch" 添加到Button 以使内容占据全部空间。之后,要在文本和按钮边框之间留出空间,只需在第一个位置和最后一个位置再添加两个网格列。

    XAML:

    <UserControl x:Class="MyNamespace.MyClass"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="900">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="3*"/>
            <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
        <Button>
            <TextBlock Text="left button"></TextBlock>
        </Button>
        <Button Grid.Column="1" HorizontalContentAlignment="Stretch">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="10"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="10"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="left" Grid.Column="1"></TextBlock>
                <TextBlock Text="right" Grid.Column="3"></TextBlock>
            </Grid>
        </Button>
    </Grid>
    

    【讨论】:

    • 你拯救了我的一天。我总是尝试使用 Horizo​​ntalAlignment 而不是 Horizo​​ntalContentAlignment。此处解释了差异:stackoverflow.com/a/11566216/1051244
    • 实际上,您可以将Button.Padding 属性设置为"10",以达到相同的结果,而无需放置那些额外的ColumnDefinitions。此外,您应该将 TextAlignment="Right" 添加到第二个 TextBlock 以真正将其与 Button 的右侧对齐。
    • 当然,还有更多方法可以达到相同的效果。 TextBlock.Margin 也可以解决问题。我通常只使用网格,因为我有一种感觉,例如,如果我不希望在所有地方应用的控件之间有相同的空间,它会给我更多的控制权,因为Padding 会影响所有子元素。
    猜你喜欢
    • 2020-08-01
    • 2018-05-26
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多