Frage

so habe ich ein Kontextmenü angebracht (Rechtsklick-Menü) auf eine Wpf Listview.

Leider, wenn Sie mit der rechten Maustaste darauf das Menü beide bringt und wählt , was Element, das Sie vorbei sind. Gibt es eine Möglichkeit, diesen Rechtsklick wählen Sie Verhalten abzusperren, während immer noch über das Kontextmenü erlaubt?

War es hilfreich?

Lösung

Der Schlüssel ist die Einstellung des Preview Ereignisses an der richtigen Stelle. Wie Sie bemerken, auch ohne Recht ein ContextMenu auf einem ListViewItem klicken, wird das Element aus, und so müssen wir das Ereignis für jedes Element setzen, nicht auf dem 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;
}

Da die Vorschau Ereignisse Tunneling dies die RightMouseButtonDown blockieren vorkommenden auf den Listviewitem sie davor ausgewählt zu verhindern, aber die RightMouseButtonDown auf dem Listview nicht verhindern und so immer noch erlauben, der ContextMenu zu öffnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top