1

contextMenu を備えたこの単純な ListBox を取得しました。

<ListBox BorderThickness="1" BorderBrush="Gray" SelectionChanged="TableList_SelectionChanged"   Grid.Column="0" x:Name="TableList">

            <ListBox.ContextMenu>
                <ContextMenu>
                    <MenuItem Click="MenuItem_Click"  Header="Ajouter"/>
                    <MenuItem Click="MenuItem_Click_1" Header="Supprimer"/>
                </ContextMenu>
            </ListBox.ContextMenu>

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Image Name="Image" Height="12px" Width="12px" Source="Apply.gif">
                            <Image.Margin>
                                <Thickness Right="10"></Thickness>
                            </Image.Margin>
                        </Image>
                        <TextBlock Text="{Binding Path=Content}" />
                    </StackPanel>
                </DataTemplate>
             </ListBox.ItemTemplate>

        </ListBox>

そして、コンテキスト メニュー アクション (任意のアクション) のハンドラーから、選択した ListBoxItem の "Image" コントロールを取得しようとしています。したがって、ハンドラーは次のとおりです。

 'Dim ListBox As ListBox = DirectCast(sender.Parent, System.Windows.Controls.ContextMenu).PlacementTarget
    Dim ListBox As ListBox = Me.TableList
    Dim myListBoxItem As ListBoxItem = CType(ListBox.ItemContainerGenerator.ContainerFromItem(ListBox.Items.CurrentItem), ListBoxItem)

    ' Getting the ContentPresenter of myListBoxItem
    Dim myContentPresenter As ContentPresenter = FindVisualChild(Of ContentPresenter)(ListBox)

    ' Finding textBlock from the DataTemplate that is set on that ContentPresenter
    Dim myDataTemplate As DataTemplate = myContentPresenter.ContentTemplate

このリンクフォーム MSDN によると、DataTemplate から "findName" メソッドを呼び出すことができました。しかし、変数「myDataTemplate」はNothingです...

私は何を間違っていますか?ありがとう

4

1 に答える 1

3

この行では、ListBoxItem の代わりに ListBox のコンテンツ プレゼンターを取得しています。

Dim myContentPresenter As ContentPresenter = FindVisualChild(Of ContentPresenter)(ListBox)

于 2013-02-05T15:08:03.690 に答える