当以编程方式更改时,Rectangle上的Horizo​​ntalAligment不起作用

时间:2011-11-30 22:14:12

标签: c# wpf

我正在创建一个新的用户控件。我的控件扩展了StackPanel,现在由另一个StackPanel组成,我在其中添加了一些Rectangle。我希望内部StackPanel在控件内水平居中,并且矩形与内部StackPanel的底部垂直对齐。我的代码在下面,但它导致内部StackPanel对齐到控件的左侧,而Rectangle在内部StackPanel的顶部对齐。

public partial class ComponentStacker : StackPanel
{
    private StackPanel tokenHolder; 

    public ComponentStacker(int numTokens)
    {
        this.Orientation = Orientation.Horizontal;

        tokenHolder = new StackPanel(); 

        this.Children.Add(tokenHolder);

        tokenHolder.Background = new SolidColorBrush(Colors.DarkKhaki);
        tokenHolder.HorizontalAlignment = HorizontalAlignment.Center;

        for (int i = 0; i < numTokens; i++)
        {
            Rectangle rect = new Rectangle();
            rect.Width = 15;
            rect.Height = 10;
            rect.Margin = new Thickness(5, 5, 5, 0);
            rect.Fill = new SolidColorBrush(Colors.Red);
            rect.VerticalAlignment = VerticalAlignment.Bottom;

            this.tokenHolder.Children.Add(rect);
        }

        this.Background = new SolidColorBrush(Colors.Goldenrod);
        this.Margin = new Thickness(10);
    }
}

2 个答案:

答案 0 :(得分:0)

我的第一个问题是:为什么不直接将矩形添加到stackPanel? 我的意思是没有tokenHolder的东西和:     this.Children.Add(RECT); 代替     this.tokenHolder.Children.Add(RECT);

启用代码帮助我完成这些事情: http://www.switchonthecode.com/tutorials/wpf-tutorial-creating-a-custom-panel-control

答案 1 :(得分:0)

我发现了问题。这是行:

this.Orientation = Orientation.Horizontal;

当我将其更改为Orientation.Vertical时,内部tokenPanel很好地居中。