在堆栈面板中拉伸文本块和文本框

Posted

技术标签:

【中文标题】在堆栈面板中拉伸文本块和文本框【英文标题】:Stretching textblock and texbox in stackpannel 【发布时间】:2016-06-24 12:07:25 【问题描述】:

我想自动将元素水平拉伸到网格宽度,所以当你拉伸窗口元素时必须按比例拉伸。

<Grid Margin="0,0,0,40" Name="TaskGrid" Visibility="Hidden">
    <StackPanel Name="AmountOfSP" Visibility="Collapsed" Orientation="Horizontal" HorizontalAlignment="Stretch">
       <CheckBox   Name="restrRadioButton" Checked="restrCheckBox_Checked" Unchecked="restrCheckBox_Unchecked"/>
       <TextBlock TextWrapping="Wrap" Text="bla-bla" />
       <TextBox Name="AmountOfO" HorizontalAlignment="Stretch" MinWidth="70" Height="20" Margin="10,0,0,0"/>
   </StackPanel>
</Grid>

【问题讨论】:

UniformGrid 工作得很好,还有一些问题,我通过使折叠字段可见来使用堆叠字段,我如何将窗口的宽度绑定到可见字段。 【参考方案1】:

正如我已回答 here 一样,您不能使用 StackPanel 在堆叠方向上拉伸,因为它将始终使用尽可能小的堆叠元素尺寸(除非它们具有固定尺寸,那么它将利用它)。

改用DockPanelGrid 并适当地排序内部组件以拉伸到完整尺寸。

【讨论】:

【参考方案2】:

在上述答案的基础上再添加一个选项。你也可以利用UniformGrid来实现你想要的。

<Grid Margin="0,0,0,40" Name="TaskGrid">
    <UniformGrid Name="AmountOfSP" Columns="3" HorizontalAlignment="Stretch">
        <CheckBox   x:Name="restrRadioButton"/>
        <TextBlock TextWrapping="Wrap" Text="bla-bla" />
        <TextBox Name="AmountOfO" HorizontalAlignment="Stretch" MinWidth="70" Height="20" Margin="10,0,0,0"/>
    </UniformGrid>
</Grid>

【讨论】:

【参考方案3】:

您可以将堆栈面板替换为类似于下图所示的网格;

     <Grid Name="AmountOfSP" Visibility="Collapsed">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

             <CheckBox   Name="restrRadioButton" Grid.Column="0" Checked="restrCheckBox_Checked" Unchecked="restrCheckBox_Unchecked"/>
             <TextBlock Grid.Column="1" TextWrapping="Wrap" Text="bla-bla" />
             <TextBox  Grid.Column="2" Name="AmountOfO" HorizontalAlignment="Stretch" MinWidth="70" Height="20" Margin="10,0,0,0"/>
    <Grid>

您可以通过更改 columnDefinition 宽度来调整不同控件的宽度,例如

                <ColumnDefinition Width="Auto"/>

就目前而言,您的所有三个列将具有相同的宽度,并且会扩展以填充它所占据的控件。

您不能以这种方式用作堆栈面板,因为它实际上只是通过“堆叠”(添加)它包含的控件的宽度/高度来获得它的宽度/高度。

您可以使用堆栈面板找到解决方法,但使用其他控件来完成您所追求的工作要容易得多。

【讨论】:

以上是关于在堆栈面板中拉伸文本块和文本框的主要内容,如果未能解决你的问题,请参考以下文章

Flex 4:具有滑块和文本框组合

从其他窗口将新项目添加到列表框

根据在另一个文本框中键入的文本,使用 AJAX 更新面板在 ASP.NET 中自动填充文本框

将文本框拉伸到页面的整个宽度,边距为 5px

在查询 where 子句中使用 Grafana 文本框面板变量

DataGrid-RowDetailsTemplate 内的堆栈面板中的变量无法识别