我有一个绑定到项目集合的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>。
我想获得为我的每个MyContext实例生成的每个App:Task,如下所示(或类似):
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似乎还没有被应用。我怎么才能强迫它,或者以其他方式得到我想要的东西呢?
发布于 2012-08-15 22:30:29
为什么首先需要UserControl?
如果你需要访问一些东西,你还没有在你的项目上绑定足够的属性到UserControls。
https://stackoverflow.com/questions/11971113
复制相似问题