在stackpannel中拉伸文本块和文本框

本文关键字:文本 stackpannel | 更新日期: 2023-09-27 17:49:24

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

<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>

在stackpannel中拉伸文本块和文本框

正如我在这里回答的那样,您不能使用StackPanel在堆叠方向上拉伸,因为它将始终使用最小可能的堆叠元素大小(除非它们有固定的大小,然后它将利用它)。

使用DockPanelGrid代替,并将内部元件适当地拉伸到最大尺寸

在上述答案的基础上再添加一个选项。您也可以使用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>

你可以用类似于下图的网格来替换你的stackpanel;

     <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"/>

这三列将具有相同的宽度,并将展开以填充其占用的控件。

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

你可能会找到使用堆栈面板的变通方法,但使用不同的控件来完成你想要的工作要容易得多。