2013-03-29 26 views
0

我寫的自定義控制,我切換默認ItemsPanel如何獲取ItemsPanel的實例?

ItemsPanelProperty.OverrideMetadata(typeof(DataGrid), 
    new FrameworkPropertyMetadata(new ItemsPanelTemplate(
    new FrameworkElementFactory(typeof(AdvancedVirtualizingStackPanel))))); 

我怎樣才能得到參考的創建AdvancedVirtualizingStackPanel的實例?

回答

0

好吧,我會回答自己。

首先你需要得到ItemsPresenter。您可以使用此代碼:

ItemsPresenter itemsPresenter = 
    (ItemsPresenter)GetTemplateChild(ItemsPresenterTemplateName); 
// You have to name ItemsPresenter (using value of 
// ItemsPresenterTemplateName string) in your XAML 

然後:

itemsPresenter.ApplyTemplate(); // In case template is not applied yet 
_stackPanel = 
    Helper.GetVisualChild<AdvancedVirtualizingStackPanel>(itemsPresenter); 

而且你有你的面板。 代碼Helper.GetVisualChild()

public static T GetVisualChild<T>(DependencyObject parent) where T : Visual 
{ 
    T child = default(T); 

    int numVisuals = VisualTreeHelper.GetChildrenCount(parent); 
    for (int i = 0; i < numVisuals; i++) 
    { 
     Visual v = (Visual)VisualTreeHelper.GetChild(parent, i); 
     child = v as T; 
     if (child == null) 
     { 
      child = GetVisualChild<T>(v); 
     } 
     if (child != null) 
     { 
      break; 
     } 
    } 

    return child; 
}