Question

donc je joins un menu contextuel (menu contextuel) à un ListView WPF.

malheureusement, lorsque vous faites un clic droit, il fait apparaître le menu et quel que soit l'article que vous êtes plus. Est-il un moyen de fermer ce comportement, sélectionnez le bouton droit sur tout en permettant le menu contextuel?

Était-ce utile?

La solution

La clé est mise l'événement PreviewMouseRightButtonDown au bon endroit. Comme vous le remarquerez, même sans ContextMenu clic droit sur un ListViewItem sélectionnera cet élément, et nous devons définir l'événement sur chaque point, et non sur le ListView.

<ListView>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <EventSetter Event="PreviewMouseRightButtonDown"
                         Handler="OnListViewItemPreviewMouseRightButtonDown" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Menu Item">Item 1</MenuItem>
            <MenuItem Header="Menu Item">Item 2</MenuItem>
        </ContextMenu>
    </ListView.ContextMenu>
    <ListViewItem>Item</ListViewItem>
    <ListViewItem>Item</ListViewItem>
    <ListViewItem>Item</ListViewItem>
    <ListViewItem>Item</ListViewItem>
    <ListViewItem>Item</ListViewItem>
    <ListViewItem>Item</ListViewItem>
</ListView>

private void OnListViewItemPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    Trace.WriteLine("Preview MouseRightButtonDown");

    e.Handled = true;
}

Depuis les événements de prévisualisation sont tunnel cela bloquerait le RightMouseButtonDown de se produisant sur les ListViewItems qui les empêchent d'être sélectionné, mais pas empêcher la RightMouseButtonDown sur le ListView et ainsi permettre encore ContextMenu d'ouvrir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top