相关:上一个问题 将不同的点击处理程序分配给全局控件模板
我有以下 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
and LogicalTree
,但我似乎总是回到外部扩展器。我可以检索外部扩展器数据模板,并且可以调用FindName
它,但无法确定将哪个元素用作第二个参数。帮助!
一次尝试:
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;
}