2013-06-24 24 views
2

當孩子加入StackPanel時,有效的方法是什麼?我以StackPanel爲例,它可能是GridWrapPanel或任何派生自Panel的控件。如何知道添加到StackPanel的孩子?

我想以兩種方式添加控件。使用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> 

在這裏,您可以看到按鈕 「測試2」 之前按鈕 「測試1」 增加。

感謝,

+0

你想要什麼,對於?? –

+0

@HighCore我在附加屬性的Setter上添加了一些控件。我認爲附加屬性的Setter在XAML添加控件之前被觸發。我需要知道何時通過XAML添加控件並對它們重新排序。 – Dilshod

+0

我修改了我的答案,看看。 –

回答

2

我加入兩個按鈕的StackPanel。
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在XAML添加控件之前被觸發。我需要知道什麼時候控制通過XAML添加和增加兒童後可能重新排序

,你應該叫StackPanel.UpdateLayout()然後重新排列