我正在创建一个新的用户控件。我的控件扩展了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);
}
}
答案 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很好地居中。