【问题标题】: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 工作得很好,还有一些问题,我通过使折叠字段可见来使用堆叠字段,我如何将窗口的宽度绑定到可见字段。

标签: c# wpf xaml


【解决方案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"/>
      

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-30
        • 1970-01-01
        • 2023-02-01
        • 1970-01-01
        • 2010-10-27
        • 2011-06-20
        • 1970-01-01
        相关资源
        最近更新 更多