0

我有一个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似乎尚未应用。我怎样才能强迫它或以任何其他方式得到我想要的东西?

4

1 回答 1

1

为什么首先需要 UserControl?

如果您需要访问您尚未将项目上的足够属性绑定到 UserControls 的内容。

于 2012-08-15T14:30:29.430 回答