2016-08-20 67 views
0

我有很多TabItem s,但只有一個DataGridDataTemplate訪問數據模板名稱

現在,我將訪問DataGrid,因爲我想改變的內容...

<Window.Resources> 
    <DataTemplate x:Key="ContentTabItem"> 
     <DataGrid Grid.Row="1" Name="_uiDataGrid"/> 
    </DataTemplate> 
</Window.Resources> 
<Grid> 
    <TabControl Name="_uiTabControl" SelectionChanged="_uiTabControl_SelectionChanged"> 
     <TabItem Name="_uiTabItembla1" Header="bla1" ContentTemplate="{StaticResource ResourceKey=ContentTabItem}"/> 
     <TabItem Name="_uiTabItembla2" Header="bla2" ContentTemplate="{StaticResource ResourceKey=ContentTabItem}"/> 
    </TabControl> 
</Grid> 

我不能用名稱訪問_uiDataGrid

+0

提到有一個看看這個:https://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx – Sameed

回答

0

嘗試是這樣的,從內容獲取數據網格主持人內容模板:

var contentPresenter = FindVisualChild<ContentPresenter>(_uiTabControl); 
var dt = contentPresenter.ContentTemplate; 
var datagrid = DataTemplateName.FindName("_uiDataGrid", contentPresenter) 
as DataGrid; 

爲了找到視覺孩子,請參閱功能FindVisualChildren()FindVisualChild()this stackoverflow post.

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) 
     where T : DependencyObject 
{ 
    if (depObj != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
     { 
      DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
      if (child != null && child is T) 
      { 
       yield return (T)child; 
      } 

      foreach (T childOfChild in FindVisualChildren<T>(child)) 
      { 
       yield return childOfChild; 
      } 
     } 
    } 
} 

public static childItem FindVisualChild<childItem>(DependencyObject obj) 
    where childItem : DependencyObject 
{ 
    foreach (childItem child in FindVisualChildren<childItem>(obj)) 
    { 
     return child; 
    } 

    return null; 
}