我有Stackpanel这是我的窗口的基础,而不是网格.... 在这个垂直的Stackpanel中,我有很多项目,包括标签和文本框......我有20多个这样的......问题是,我需要Stackpanel的水平对齐设置为伸展因为我需要一些具有整个窗口宽度的项目...但我也希望所有项目都对齐到窗口的左侧... 目前为了达到我想要的目的,我必须为Stackpanel内的每个控件指定水平对齐=左... 这非常烦人,因为我有大量的控件一次又一次地指定水平对齐,这使得xaml丑陋...... 有没有更好的方法来解决这个问题? (我也应该注意,我尝试将Stackpanel的流向设置为左,但我没有工作)
答案 0 :(得分:0)
可能是对stackpanel的子项进行迭代并设置水平对齐是否合适?
Panel.Children.OfType<Control>().ToList().ForEach(child=>child.HorizontalAlignment =HorizontalAlignment.Left);
答案 1 :(得分:0)
我建议您切换到ItemsControl,并使用对齐属性设置ItemContainerStyle
。
ItemsControl
包裹ContentPresenter
中的每个项目,ItemContainerStyle
适用于包装每个项目的ContentPresenter
。
XAML代码看起来像这样:
<ItemsControl>
<!-- ItemContainerStyle -->
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="HorizontalAlignment" Value="Left" />
</Style>
</ItemsControl.ItemContainerStyle>
<!-- controls here -->
</ItemsControl>
或者,您可以使用代码隐藏来设置Loaded方法中所有项的此属性。这实际上可能会更好一些,因为您在UI中没有额外的ContentPresenter
图层。
private void MyStackPanel_Loaded()
{
foreach(FrameworkElement ctl in MyStackPanel.Children)
{
ctl.HorizontalAlignment = HorizontalAlignment.Left;
}
}