0

関連:異なるクリック ハンドラーをグローバル コントロール テンプレートに割り当てる前の質問

私は次の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;
}
4

0 に答える 0