我有一个有两列和两行的网格 . 在第一列,第一行我有这个:
<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 回答
谢谢你 . 我没有时间尝试,所以我不确定这是否有效 .
您是否尝试使用最后一个子填充设置为true的DockPanel而不是StackPanel?如果将标签向左停靠,按钮向右停靠 . 然后确保文本框是dockpanel的最后一个子元素,我认为如果其HorizontalAlignment设置为stretch,则文本框的大小将填充剩余空间 .
为了完整性,这里是我用Josh的答案提出的解决方案:
重要的部分是:
DockPanel
需要属性LastChildFill="True"
,然后在DockPanel中列出应该"dock"的项目并告诉他们停靠DockPanel.Dock="Left"
和DockPanel.Dock="Right"
,并作为最后一项,放置一个应该占用剩余空间的项目 . (最后一个元素似乎不需要属性HorizontalAlignment="Stretch"
,如果不存在,我看不出差异 . )