2016-08-20 4 views
0

У меня есть много TabItem s, но только один DataGrid в DataTemplate.Access Datatemplate с именем

Теперь я получить доступ к 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

Попробуйте что-то вроде этого, чтобы получить DataGrid от содержания Ведущий шаблон содержания:

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; 
} 
Смежные вопросы