当以编程方式更改时,矩形上的水平对齐不起作用

本文关键字:水平 不起作用 对齐 编程 方式更 | 更新日期: 2023-09-27 18:16:21

我正在创建一个新的用户控件。我的控件扩展了一个StackPanel,现在由另一个StackPanel组成,我在其中添加了一些矩形。我想内部StackPanel水平居中的控制,和矩形垂直对齐与内部StackPanel的底部。我的代码如下,但它导致内部StackPanel对齐到控件的左侧,矩形对齐到内部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);
    }
}

当以编程方式更改时,矩形上的水平对齐不起作用

我的第一个问题是:为什么不直接添加矩形到您的stackPanel ?我的意思是没有token持有人的东西。this.Children.Add(矩形);而不是this.tokenHolder.Children.Add(矩形);

Switch on code帮助我解决了这些问题:http://www.switchonthecode.com/tutorials/wpf-tutorial-creating-a-custom-panel-control

我找到问题了。这是一行:

this.Orientation = Orientation.Horizontal;

当我把它改成方向。垂直,内部tokenPanel居中很好。