按钮的动态余量

时间:2016-02-28 08:39:02

标签: c# .net wpf

我正在使用WPF创建桌面应用程序 我已经连续放置了三个元素:Button,Textbox和Label 当我调整屏幕大小时,Label和Textbox的边距是一致的,但Button不是。按钮会根据屏幕高度缩小并拉伸。

enter image description here

enter image description here

如您所见,当屏幕高度较大时,按钮较大,反之亦然。

以下是代码:

<Grid Grid.Row="0" Grid.Column="1">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"></ColumnDefinition>
        <ColumnDefinition Width="1*"></ColumnDefinition>
        <ColumnDefinition Width="1*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <TextBlock Text="Search: (Name or Contact)" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Right" Margin="0,0,25,0" VerticalAlignment="Center" FontSize="20" TextWrapping="Wrap"/>
    <TextBox Grid.Column="1" HorizontalAlignment="Stretch" Height="auto" Margin="25,0,25,0" TextWrapping="Wrap" Text="" VerticalAlignment="Center" FontSize="20"  Grid.Row="0" Name="TxtSearch" TextChanged="TxtSearch_TextChanged"/>
    <Button x:Name="BtnSearch"  Grid.Column="2" Grid.Row="0" FontSize="20" Click="BtnSearch_Click" Margin="32">
        <Viewbox>
            <TextBlock>
                Search
            </TextBlock>
        </Viewbox>
    </Button>
</Grid>

我希望按钮高度保持一致,边距是动态的。

2 个答案:

答案 0 :(得分:2)

有几种方法可以解决这个问题。

例如,您可以将按钮的VerticalAlignment设置为Center,在正常情况下它可以正常工作。但是,您的内容为Viewbox,内部为TextBlock。那么,Viewbox,你现在设置它的方式,将根据窗口大小重新调整大小。如果您选择VerticalAlignment方法,我建议您只需将按钮的Content设置为“搜索”文字:Content="Search"

如果您希望保留Viewbox,可以将按钮的高度设置为静态值,这肯定会阻止它垂直重新调整大小。但是,在这种情况下,我并不是静态尺寸的忠实粉丝。

我不完全确定你为什么会有Viewbox,但到目前为止这是最简单的两种方法。除非你有一个特定的理由让Viewbox作为按钮的内容,否则我会删除它,因为它会给你带来不必要的问题。 Viewbox有其用途,但我不认为这是其中之一。

答案 1 :(得分:0)

当您定义网格时,宽度/高度有3个可能性

  • 固定尺寸​​
  • 自动(扩展到内容的大小)
  • Star(占用尽可能多的空间)

因此,在您将Button放置在Grid.Row =“0”的情况下,将该行设为固定大小。如果您只在网格中定义一行,我建议您创建另一行“星”高度。然后将视图放在行中。