如何使文本框扩展以填充网格单元的剩余空间?

Posted

技术标签:

【中文标题】如何使文本框扩展以填充网格单元的剩余空间?【英文标题】:How do i make the textboxes expand to fill the remaining space of the Grid Cell? 【发布时间】:2014-10-05 19:04:09 【问题描述】:

我有以下窗口,其中包含一些输入 textboxes。但是这些文本框不会扩展以填充第二列的剩余空间。此外,当窗口调整textboxes 的大小时,不会相应地调整大小

这是我的窗口

这是我的 XAML 标记

<Window x:Class="WpfApplication8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <Grid ShowGridLines="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="28"></RowDefinition>
        </Grid.RowDefinitions>

        <Label Content="First Name" Grid.Column="0" Grid.Row="0"></Label>
        <Label Content="Last Name" Grid.Column="0" Grid.Row="1"></Label>
        <Label Content="Street Name" Grid.Column="0" Grid.Row="2"></Label>
        <Label Content="Suburb" Grid.Column="0" Grid.Row="3"></Label>
        <Label Content="City" Grid.Column="0" Grid.Row="4"></Label>

        <TextBox Width="313" Grid.Column="1" Margin="3" HorizontalAlignment="Left"/>
        <TextBox Width="313" Grid.Column="1" Grid.Row="1" Margin="3" 
                 HorizontalAlignment="Left" ></TextBox>
        <TextBox Width="313" Grid.Column="1" Grid.Row="2" Margin="3" 
                 HorizontalAlignment="Left"></TextBox>
        <TextBox Width="313" Grid.Column="1" Grid.Row="3" Margin="3" 
                 HorizontalAlignment="Left"></TextBox>
        <TextBox Width="313" Grid.Column="1" Grid.Row="4" Margin="3"
                 HorizontalAlignment="Left"></TextBox>

        <StackPanel Orientation="Horizontal" Grid.Column="1" Grid.Row="5" 
                    HorizontalAlignment="Right">
        <Button Content="Save" Grid.Column="1" Grid.Row="5" Width="100" Margin="3" />
        <Button Content="Exit" Grid.Column="1" Grid.Row="5" Width="100" 
                 HorizontalAlignment="Right" Margin="3"></Button>
        </StackPanel>
        <!--<TextBox Width="313" Grid.Column="1"></TextBox>-->
    </Grid>
</Window>
    是否可以扩展textboxes 以填充第二列中的剩余空间? 是否可以通过表单调整大小来调整textboxes 的大小?

【问题讨论】:

【参考方案1】:

您对宽度进行了硬编码,因此它始终保持不变。删除它,并将对齐更改为拉伸

<TextBox Grid.Column="1" Margin="3" HorizontalAlignment="Stretch">

【讨论】:

我建议不要删除 Width,而是将其更改为 MinWidth="313"。这样,您可以获得拉伸行为,同时也避免了用户将大小调整为无法使用的情况。 @Chris Developer 不对用户的不明智使用负责!【参考方案2】:

如果有人遇到同样的问题,请注意:

对我来说,问题是我在网格上为我的两列都使用了 SharedSizeGroup。 如果我删除了什么是 * 列上的 sharedsizegroup="b",问题就解决了。

<StackPanel Orientation="Vertical"
            Grid.IsSharedSizeScope="True">
                        <Grid Margin="0 10">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" SharedSizeGroup="a" />
                                <ColumnDefinition Width="*"  **SharedSizeGroup="b"**/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Text="Size (m): " />
                            <TextBox x:Name="RealObjSize"
                                     Grid.Column="1"
                                     MinWidth="50"
                                     HorizontalAlignment="Stretch"
                                     TextChanged="RealObjSize_OnTextChanged" />
                        </Grid>

                        <Grid Margin="0 10">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" SharedSizeGroup="a" />
                                <ColumnDefinition Width="*" **SharedSizeGroup="b"**/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Text="Distance (m): " />
                            <TextBox x:Name="RealObjDist"
                                 Grid.Column="1"
                                 MinWidth="50"
                                 HorizontalAlignment="Stretch"
                                 TextChanged="RealObjDist_OnTextChanged" />
                        </Grid>
                    </StackPanel>

【讨论】:

【参考方案3】:

只需放置 Horizo​​ntalAlignment="Stretch" 并删除 Width

【讨论】:

以上是关于如何使文本框扩展以填充网格单元的剩余空间?的主要内容,如果未能解决你的问题,请参考以下文章

网页上的自动填充文本框 (Javascript/VBScript)

如何使文本输入框占据父块内的所有剩余宽度?

居中时如何“自动扩展”CSS网格单元以填充可用空间? [复制]

读取自定义Datagrid的每个单元格数据 - WPF C#

MS Access:如何使此文本框根据查询自动填充值?

将 PHPSpreadsheet 中的所有文本居中并使单元格扩展以填充上下文