関連:異なるクリック ハンドラーをグローバル コントロール テンプレートに割り当てる前の質問
私は次のxamlを持っています:
<Expander Name="SharesExpander" Template="{StaticResource SimpleExpanderTemp}" Header="Shares">
<ItemsControl Name="SharesControl" ItemsSource="{Binding Sharers}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander Name="ShareExpander" Template="{StaticResource SimpleExpanderTemp}" Header="{Binding Name}">
<local:FileTypesListBoxControl Margin="25,-10,-10,-10" BorderThickness="10" />
</Expander>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Expander>
クリック ハンドラーを追加するために、コード ビハインドを介して内側のエキスパンダーのヘッダー ボタンにアクセスしようとしています。
を使用して外側のエキスパンダーのボタンを取得できますがSharesExpander.Template.FindName("ExpanderHeader", SharesExpander)
、データ テンプレート内の内側のエキスパンダーを取得する方法がわかりません。VisualTree
とをたどってみましたLogicalTree
が、常に外側のエキスパンダーに戻ってしまうようです。外側のエキスパンダー データ テンプレートを取得し、それを呼び出すことはできますFindName
が、2 番目のパラメーターとして使用する要素を特定できません。ヘルプ!
1 回の試行:
foreach (var item in SharesControl.Items)
{
//test is always null
var test = SharesControl.ItemContainerGenerator.ContainerFromItem(item);
}
別の試み:
ControlTemplate controlTemplate = SharesControl.Template;
var control = controlTemplate.FindName("ShareExpander", ?whatGoesHere);
再び:
for (int i = 0; i < 1; i++)
{
//test again always null
var test = ContactSharesItemsControl.ItemContainerGenerator.ContainerFromIndex(i) as Expander;
}