在网格单元格中,如何在按钮和文本框之间共享空间

时间:2014-02-02 02:15:45

标签: c# wpf layout

我有以下XAML,在网格单元格中,我尝试使用一个按钮仅使用它所需的空间,停靠在右侧,并停靠在左侧,一个文本框占据该单元格中的剩余空间

<Grid Height="Auto" Width="Auto"  Margin="5">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="290"></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    ...

    <DockPanel Grid.Column="1" Grid.Row="4">
        <TextBox Name="txtSelectedViewUrl"  Text="{Binding Url}" IsEnabled="{Binding EditMode}"/>
        <Button Name="btnTestUrl" Content="Test" Click="btnTestUrl_Click_1" DockPanel.Dock="Right"/>
    </DockPanel>

    ...

</Grid>

相反,我得到以下内容:当最初为空时,文本框几乎不可见,我只需单击它即可开始输入。按钮占据了整个空间。当我在文本框中键入时,按钮的宽度会减小,从而为文本框增加空间。当你认为按钮已达到最小尺寸时,它不会停在那里,它会持续到文本框占据整个单元格并且按钮变得不可见。至少文本框不会溢出......

我尝试了各种各样的东西,但无法让停靠面板布局在这里工作。我正在寻找从右到左流动的堆栈面板可以提供帮助的解决方案,但是当搜索如何获得最后一个元素来填充空间的剩余部分时,我最终会建议使用底座面板作为解决方案!

1 个答案:

答案 0 :(得分:1)

您需要将DockPanel的LastChildFill属性设置为true,并将文本框设置为最后一个子项(dockpanel中的最后一个元素)。这将告诉DockPanel将文本框显示为填充元素。检查this post有关DockPanel的信息以供参考。

<DockPanel Grid.Column="1" Grid.Row="4" LastChildFill="True">
    <Button Name="btnTestUrl" Content="Test" Click="btnTestUrl_Click_1" DockPanel.Dock="Right"/>
    <TextBox Name="txtSelectedViewUrl"  Text="{Binding Url}" IsEnabled="{Binding EditMode}"/>
</DockPanel>