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 に答える