برنامج الأغذية العالمي listview بزر الماوس الأيمن فوق المشكلة

StackOverflow https://stackoverflow.com/questions/1075170

سؤال

وهكذا وقد أرفقت قائمة السياق (بزر الماوس الأيمن فوق القائمة) إلى listview برنامج الأغذية العالمي.

للأسف، عند النقر بزر الماوس الأيمن فوق فإنه إحضار كل من القائمة و<م> يختار أيا كان البند كنت أكثر. هل هناك طريقة لاغلاق هذا بزر الماوس الأيمن فوق حدد السلوك حين لا يزال يسمح قائمة السياق؟

هل كانت مفيدة؟

المحلول

والمفتاح هو وضع الحدث 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;
}

ومنذ أحداث المعاينة هي نفق هذا سوف منع RightMouseButtonDown من تحدث على ListViewItems منعهم من اختياره، ولكن لا يمنع RightMouseButtonDown على يكون ListView وهكذا لا تزال تسمح ContextMenu لفتح.

نصائح أخرى

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top