如何知道添加到StackPanel的孩子?

时间:2013-06-24 16:53:48

标签: c# wpf

检测儿童何时加入StackPanel的有效方法是什么?我使用StackPanel作为示例,它可以是GridWrapPanel或来自Panel的任何控件。

我试图以两种方式添加控件。使用AttachedProperty的XAML和PropertyChanged。

以下是一些代码:

public class Region : UserControl
{
    public static readonly DependencyProperty RegionNameProperty;
    static Region()
    {
        RegionNameProperty = DependencyProperty.RegisterAttached(
        "RegionName",
        typeof(string),
        typeof(Region),
        new UIPropertyMetadata(new PropertyChangedCallback((s,e)=>
        {
            if(s is StackPanel)
            {
                 StackPanel stack = (StackPanel)s;
                 stack.Children.Add(new Button(){Content="Test2"});
            }
        }))
      );
   }
}

XAML:

        <StackPanel Name="stack2" local:Region.RegionName="MyRegion1">
            <Button Content="Test 1"/>
        </StackPanel>

在这里,您可以看到按钮“Test 1”之前添加了按钮“Test 2”。

谢谢,

1 个答案:

答案 0 :(得分:2)

  

我在stackpanel上添加了两个按钮   1)从附加属性改变 - 按钮“测试2”
  2)来自XAML - 按钮“Test 1”。
  问题:在“测试1”之前添加了“测试2”按钮。

所有控件都在构造函数中创建“InitializeComponent”方法(我假设),因此您可以在Window.Loaded事件中重新排序。
xaml的按钮只创建一次,因此在Loaded事件中另外一个重新排序应该有帮助。


旧答案:

有一个事件LayoutUpdated,你可以试试这个,更多信息在这里:

http://msdn.microsoft.com/en-us/library/system.windows.uielement.layoutupdated.aspx

  

我在附加属性的Setter上添加了一些控件。我认为附加属性的Setter在XAML上添加控件之前被触发。我需要知道XAML添加控件的时间并重新排序

也许在添加孩子之后,您应该只需拨打StackPanel.UpdateLayout(),然后重新排序