Domanda

così Ho allegato un menu contestuale (tasto destro del mouse) per un controllo ListView WPF.

Purtroppo, quando si fa clic su di esso porta in primo piano sia il menu e seleziona qualsiasi elemento che si sono finiti. C'è un modo per spegnere questo tasto destro del mouse, selezionare il comportamento, pur consentendo il menu di contesto?

È stato utile?

Soluzione

La chiave sta impostando l'evento PreviewMouseRightButtonDown nel posto giusto. Come si noterà, anche senza un ContextMenu clic destro su un ListViewItem selezionerà quella voce, e quindi abbiamo bisogno di impostare l'evento su ogni voce, non sulla 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;
}

Dopo gli eventi di anteprima sono tunnel poiché possono impedire la RightMouseButtonDown da si verificano sui ListViewItems impedendone selezionata, ma non impedire il RightMouseButtonDown sul ListView e quindi consentono ancora la ContextMenu per aprire.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top