在可伸展的WPF窗口中的一行上布局两个控件

时间:2011-09-05 12:47:50

标签: c# wpf xaml layout

这是一个相当常见的UI模式:包含左侧路径的文本框,以及右侧的“浏览”按钮。如果窗口调整大小,按钮将保持向右,但文本框会拉伸以显示更多/更少的路径。因此,在锚点的旧时代,按钮将固定在右侧,文本框将左右固定。

尝试在WPF中复制它似乎令人担忧。

如果我创建一个新窗口,默认情况下会附带一个Grid布局。我将文本框放在左侧并适当调整大小,然后将按钮放在右侧。文本框的Horizo​​ntalAlignment是Stretch,而按钮则是Right。

在我看来,这就像所描述的那样工作,但在现实生活中,文本框根本没有调整大小,而是试图将自己置于窗口中,而按钮按预期运行。是什么给了什么?

这是我的XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="241" d:DesignWidth="414" SizeToContent="WidthAndHeight">
    <Grid>
        <TextBox Height="23" HorizontalAlignment="Stretch" Name="textBox1" VerticalAlignment="Top" Margin="12,11,101,0" />
        <Button Content="Button" Height="23" HorizontalAlignment="Right" Margin="0,11,12,0" Name="button1" VerticalAlignment="Top" Width="75" />
    </Grid>
</Window>

2 个答案:

答案 0 :(得分:4)

您可以使用两列创建另一个GridControl,其中一列具有Browse按钮的固定宽度,另一列适用于TextBox

<Grid>            
    <Grid.ColumnDefinitions> 
        <ColumnDefinition />
        <ColumnDefinition Width="75" />
    </Grid.ColumnDefinitions>
    <TextBox Grid.Column="0" />
    <Button Grid.Column="1" />
</Grid>

答案 1 :(得分:3)

您可以使用DockPanel并将LastChildFill属性设置为true,以确保文本框使用所有可用空间:

<DockPanel LastChildFill="true">
  <Button DockPanel.Dock="Right">Browse</Button>
  <TextBox>Content</TextBox>
</DockPanel>