![](/img/trans.png)
[英]how to access label name in nested listview datatemplate on a check box event
[英]Access Datatemplate with name
我有很多TabItem
,但是DataTemplate
只有一个DataGrid
。
现在,我将访问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
访问
尝试执行类似的操作,从内容演示者内容模板获取datagrid:
var contentPresenter = FindVisualChild<ContentPresenter>(_uiTabControl);
var dt = contentPresenter.ContentTemplate;
var datagrid = DataTemplateName.FindName("_uiDataGrid", contentPresenter)
as DataGrid;
要查找视觉子级,请参考此stackoverflow帖子中提到的FindVisualChildren()
和FindVisualChild()
函数。
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.