我有一个有两列和两行的网格。在第一列中,我确实有第一行:
<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的完整可用空间,但我不能让它工作。
当前行为
content
中文本所需的空间,目前正好。通缉行为
content
中文本所需的空间,目前正好。我的TextBox是否有类似“max”属性的东西依赖于StackPanel的大小?
答案 0 :(得分:4)
谢谢你。我没有时间尝试,所以我不确定这是否有用。
您是否尝试使用最后一次子填充设置为true的DockPanel而不是StackPanel?如果将标签向左停靠,按钮向右停靠。然后确保文本框是dockpanel的最后一个子元素,我认为如果其HorizontalAlignment设置为stretch,则文本框的大小将填充剩余空间。
答案 1 :(得分: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中应该“停靠”某个地方并告诉他们停靠DockPanel.Dock="Left"
和{{1}的项目并且作为最后一项,放置一个应该占用剩余空间的项目。 (最后一个元素似乎不需要属性DockPanel.Dock="Right"
,如果它存在与否,我看不出差异。)