我有一个TabControl
绑定到一个项目集合,其中每个项目应该由一个托管用户控件的普通TabItem
表示,如下所示:
<TabControl x:Name="Items"
ItemsSource="{Binding ElementName=This,Path=Files}">
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Header" Value="{Binding Path=Name}" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type App:MyContext}">
<App:Task x:Name="task" Image="{Binding Path=Image}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
ItemsSource
绑定到ObservableCollection<MyContext>
。
我想了解为App:Task
个MyContext
个实例生成的每个foreach (var file in Files)
{
var container = Items.ItemContainerGenerator.ContainerFromItem(file) as TabItem;
if (container == null) continue;
var task = container.Content as Task;
if (task == null) return;
// ...
}
,如此(或类似):
container.Content
但MyContext
为Task
而不是var task = container.ContentTemplate.FindName("task") as Task;
。所以我想我应该使用:
ContentTemplate
但这引发了异常,因为此时{{1}}似乎尚未应用。我怎么能强迫它或以任何其他方式得到我想要的东西?
答案 0 :(得分:1)
为什么首先需要UserControl?
如果您需要访问某些内容,那么您的项目上没有将足够的属性绑定到UserControls。