stackpanel项目对齐

时间:2015-08-24 15:03:03

标签: c# wpf xaml

我有Stackpanel这是我的窗口的基础,而不是网格.... 在这个垂直的Stackpanel中,我有很多项目,包括标签和文本框......我有20多个这样的......问题是,我需要Stackpanel的水平对齐设置为伸展因为我需要一些具有整个窗口宽度的项目...但我也希望所有项目都对齐到窗口的左侧... 目前为了达到我想要的目的,我必须为Stackpanel内的每个控件指定水平对齐=左... 这非常烦人,因为我有大量的控件一次又一次地指定水平对齐,这使得xaml丑陋...... 有没有更好的方法来解决这个问题? (我也应该注意,我尝试将Stackpanel的流向设置为左,但我没有工作)

2 个答案:

答案 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;
    }
}