首页 文章

TextBox应该占用可用空间,并且在填充文本时不会增长

提问于
浏览
1

我有一个有两列和两行的网格 . 在第一列,第一行我有这个:

<StackPanel  Orientation="Vertical" HorizontalAlignment="Stretch" Grid.ColumnSpan="1" Grid.Row="0" Grid.Column="0">
    <StackPanel  Orientation="Horizontal" Height="25" HorizontalAlignment="Stretch">
        <Label Content="Text:"/>
        <TextBox Name="TB_Text" HorizontalAlignment="Stretch" MinWidth="120" />
        <Button Name="BT_TextApply" Content="Apply" Width="75" HorizontalAlignment="Right" Click="BT_TextApply_Click" />
    </StackPanel>
</StackPanel>

我有“行”(垂直StackPanel中的水平StackPanel),包括Label,Textbox和属于一起的按钮 .

StackPanels得到属性 HorizontalAlignment="Stretch" ,以便他们使用Grid单元格中的完整空间,这没关系 .

但是现在我希望我的三个元素也可以填充StackPanel的完整可用空间,但是我没有让它工作 .

Current behaviour

  • 标签没有宽度占据 content 中需要的文本的空间,现在正好 .

  • 文本框具有最小宽度,当我用文本填充它时会变大

  • 该按钮位于Texbox的右侧,当TextBox变大时移动到右侧,当它移出StackPanel时消失

Wanted behaviour

  • 标签没有宽度占据 content 中所需文本的空间,现在正好 .

  • Button应该有一个固定的宽度(没问题)并且应该粘在我的StackPanel的右边框上,这不起作用

  • TextBox应该使用其间的空间而不是更多,即使填充了更多文本而不是更多 .

我的TextBox是否有类似“max”属性依赖于StackPanel的大小?

2 回答

  • 4

    谢谢你 . 我没有时间尝试,所以我不确定这是否有效 .

    您是否尝试使用最后一个子填充设置为true的DockPanel而不是StackPanel?如果将标签向左停靠,按钮向右停靠 . 然后确保文本框是dockpanel的最后一个子元素,我认为如果其HorizontalAlignment设置为stretch,则文本框的大小将填充剩余空间 .

  • 0

    为了完整性,这里是我用Josh的答案提出的解决方案:

    <StackPanel  Orientation="Vertical" HorizontalAlignment="Stretch" Grid.ColumnSpan="1" Grid.Row="0" Grid.Column="0">
        <DockPanel  Height="25" HorizontalAlignment="Stretch" LastChildFill="True">
            <Label Content="Text:" DockPanel.Dock="Left"/>
            <Button Name="BT_TextApply" Content="Apply" Width="75" DockPanel.Dock="Right" Click="BT_TextApply_Click" />
            <TextBox Name="TB_Text"/>
        </DockPanel>
    </StackPanel>
    

    重要的部分是: DockPanel 需要属性 LastChildFill="True" ,然后在DockPanel中列出应该"dock"的项目并告诉他们停靠 DockPanel.Dock="Left"DockPanel.Dock="Right" ,并作为最后一项,放置一个应该占用剩余空间的项目 . (最后一个元素似乎不需要属性 HorizontalAlignment="Stretch" ,如果不存在,我看不出差异 . )

相关问题