我确实有一个两列两行的网格。在第一列,第一行我有这个:
<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)由一个标签,一个文本框和一个按钮,属于在一起。
StackPanels获得了属性HorizontalAlignment="Stretch"
,以便他们使用网格单元格内的完整空间,这是OK的。
但是现在我想让我的三个元素也填满StackPanel的完整可用空间,但是我没有让它工作。
当前行为
- 标签没有宽度,它占用了
content
中文本需要的空间,这在目前很好。 - 文本框有一个最小宽度,当我填充文本时它会变大,
- 按钮位于文本框的右侧,当文本框变大时向右移动,当它移出StackPanel 时消失。
希望行为/strong>
- 标签没有宽度,它占用了
content
中文本需要的空间,这是目前很好的。 - 按钮应该有一个固定的宽度(没有问题),应该坚持到我的StackPanel的右边框,这是不工作
- 文本框应该使用中间的剩余空间,而不是更多的空间,即使填充的文本超出了范围。
是否有像"max"属性为我的文本框取决于StackPanel的大小?
谢谢stema。我没有时间去尝试,所以我不确定这是否有效。
而不是StackPanel,你有没有尝试使用DockPanel最后一个子填充设置为真?如果你将标签停靠在左边,按钮停靠在右边。然后确保文本框是dockpanel的最后一个子元素,我认为如果文本框的HorizontalAlignment设置为stretch,那么文本框的大小将填充剩余的空间。
为了完整起见,下面是我用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"
和DockPanel.Dock="Right"
,并作为最后一项,放置应该占用剩余空间的项目。(属性HorizontalAlignment="Stretch"
似乎不需要最后一个元素,我看不出它是否存在差异。)