4

检测孩子何时添加的有效方法是什么StackPanel?我正在使用StackPanel作为示例,它可以是GridWrapPanel或者派生自 Panel 的任何控件。

我正在尝试以两种方式添加控件。使用 XAML 和 AttachedProperty 的 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>

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

谢谢,

4

1 回答 1

3

我正在向堆栈面板添加两个按钮。
1) 从附加属性更改 - 按钮“测试 2”
2) 从 XAML - 按钮“测试 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()然后重新排序

于 2013-06-24T16:57:19.373 回答