문제

그래서 WPF 목록 보기에 컨텍스트 메뉴(오른쪽 클릭 메뉴)를 연결했습니다.

안타깝게도 마우스 오른쪽 버튼을 클릭하면 메뉴와 선택하다 당신이 끝났던 항목이 무엇이든.상황에 맞는 메뉴를 허용하면서 마우스 오른쪽 버튼 클릭 선택 동작을 차단하는 방법이 있습니까?

도움이 되었습니까?

해결책

핵심은 PreviewMouseRightButtonDown 이벤트를 올바른 위치에 설정하는 것입니다.보시다시피 ContextMenu가 없어도 ListViewItem을 마우스 오른쪽 버튼으로 클릭하면 해당 항목이 선택되므로 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;
}

미리보기 이벤트가 진행되기 때문에 터널링 그러면 ListViewItems에서 RightMouseButtonDown이 발생하여 선택되지 않도록 차단되지만 ListView에서 RightMouseButtonDown이 차단되지 않으므로 ContextMenu가 계속 열릴 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top