检测儿童何时加入StackPanel
的有效方法是什么?我使用StackPanel
作为示例,它可以是Grid
,WrapPanel
或来自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”。
谢谢,
答案 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()
,然后重新排序