最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WPF彈出右鍵菜單時判斷鼠標是否選中該項

 更新時間:2022年06月17日 11:00:49   作者:天方  
這篇文章介紹了WPF彈出右鍵菜單時判斷鼠標是否選中該項的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

和上篇在WPF的TreeView中實現(xiàn)右鍵選定一樣,這仍然是一個右鍵菜單的問題:

這個需求是在一個實現(xiàn)剪貼板的功能的時候遇到的:在彈出右鍵菜單時,如果菜單彈出位置在ListViewItem中時,我們認為這項已經(jīng)被選中,可以使用剪貼板功能。

當(dāng)菜單彈出位置在ListView的空白處時,我們一般認為沒有項被選中,此時是不應(yīng)該使能剪貼板功能的。

但是這個時候,該項仍然是選中的。不能通過Item的IsSelected的屬性來區(qū)分這兩種情況。這樣,就需要我們加一個判斷鼠標是否在所選的節(jié)點上的函數(shù)。實現(xiàn)這個功能的方式有如下兩種:

方法1:響應(yīng)ListView的PreviewMouseRightButtonDown事件,在其中判斷是否有節(jié)點被選中。還是直接上代碼吧:

    bool isItemSelected = false;
    private void ListView_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        object item = GetElementFromPoint((ItemsControl)sender, e.GetPosition((ItemsControl)sender));
        isItemSelected = (item != null);
    }

    private object GetElementFromPoint(ItemsControl itemsControl, Point point)
    {
        UIElement element = itemsControl.InputHitTest(point) as UIElement;
        while (element != null)
        {
            if (element == itemsControl)
                return null;
            object item = itemsControl.ItemContainerGenerator.ItemFromContainer(element);
            if (!item.Equals(DependencyProperty.UnsetValue))
                return item;
            element = (UIElement)VisualTreeHelper.GetParent(element);
        }
        return null;
    }

這個其實就是一個命中測試的方面的問題,代碼還是比較基礎(chǔ)的,也沒有什么需要解釋的地方,但寫起來還是有點麻煩。

方法2:同時響應(yīng)ListView的PreviewMouseRightButtonDown事件和TreeViewItem的PreviewMouseRightButtonDown事件。

  • 當(dāng)鼠標點擊在ListViewItem上時:發(fā)生的事件順序為 ListView_MouseDown 、ListViewItem_MouseDown。
  • 當(dāng)鼠標點擊在ListView外時:發(fā)生的事件僅為 ListView_MouseDown 。

因此,只要在ListView_MouseDown 中設(shè)置isItemSelected = false,在ListViewItem_MouseDown中設(shè)置isItemSelected = true即可。由于非常簡單,就不附代碼了。

使用上面的兩種方法后,就可以直接在剪切復(fù)制命令的CanExecute函數(shù)中通過isItemSelected來判斷是否該使能剪切復(fù)制命令了。

另外,這兩方法是針對ItemsControl類型的控件的,也就是說,在TreeView或ListBox等控件中也可以使用,如果把它們封裝一下就更方便了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

板桥市| 于田县| 嘉义县| 安塞县| 稻城县| 铜山县| 玉环县| 镇雄县| 桐庐县| 策勒县| 上饶县| 伊通| 长治市| 临沭县| 万山特区| 广德县| 济宁市| 嘉荫县| 秦皇岛市| 长泰县| 兴化市| 庆城县| 百色市| 塔城市| 祁连县| 贺兰县| 深州市| 安吉县| 甘德县| 龙游县| 濮阳县| 勐海县| 禹州市| 长阳| 游戏| 垦利县| 综艺| 潼关县| 鄂温| 江门市| 长治市|