次のように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
はまだ適用されていないように見えるため、これは例外をスローします。どうすればそれを強制したり、他の方法で欲しいものを手に入れることができますか?