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

對(duì)WPF中的TreeView實(shí)現(xiàn)右鍵選定

 更新時(shí)間:2022年06月17日 10:17:18   作者:天方  
這篇文章介紹了WPF實(shí)現(xiàn)右鍵選定TreeView的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在WPF中,TreeView默認(rèn)情況是不支持右鍵選定的,也就是說(shuō),當(dāng)右鍵點(diǎn)擊某節(jié)點(diǎn)時(shí),是無(wú)法選中該節(jié)點(diǎn)的。當(dāng)我們想在TreeViewItem中實(shí)現(xiàn)右鍵菜單時(shí),往往希望在彈出菜單的同時(shí)選中該節(jié)點(diǎn),以使得菜單針對(duì)選中的節(jié)點(diǎn)生效。

圖1:雖然是在GNU節(jié)點(diǎn)上彈出的右鍵菜單,但選中的節(jié)點(diǎn)仍然是上次左鍵單擊的DOC節(jié)點(diǎn)。
圖2:彈出的右鍵菜單同時(shí)選中GNU節(jié)點(diǎn)才是我們所需要的效果

實(shí)現(xiàn)這個(gè)功能并不是很難,我最開(kāi)始的做法就是目前網(wǎng)上流行的版本:

  • 在TreeViewItem中響應(yīng)PreviewMouseRightButtonDown事件

  • 在響應(yīng)右鍵單擊事件前選中sender(TreeViewItem)節(jié)點(diǎn)。

private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    var treeViewItem = sender as TreeViewItem;
    if (treeViewItem != null)
    {
        treeViewItem.Focus();
        e.Handled = true;
    }
}

但這樣做還存在一個(gè)問(wèn)題:當(dāng)選擇子節(jié)點(diǎn)時(shí),sender并不是子節(jié)點(diǎn)的TreeViewItem,而是其父節(jié)點(diǎn)。導(dǎo)致無(wú)法選擇選擇子節(jié)點(diǎn)。如下圖所示:

要解決這個(gè)問(wèn)題也不難,那就是根據(jù)MouseButtonEventArgs的OriginalSource來(lái)獲取節(jié)點(diǎn)。但是OriginalSource也不是TreeViewItem,而是產(chǎn)生鼠標(biāo)事件的子控件,因此還得往上查找,從而找到所屬的TreeViewItem。

最終的解決方案如下:

1. 在TreeViewItem中響應(yīng)PreviewMouseRightButtonDown事件

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="TreeViewItem_PreviewMouseRightButtonDown"/>
    </Style>
</TreeView.ItemContainerStyle>

2. 在響應(yīng)右鍵單擊事件前選中TreeViewItem節(jié)點(diǎn)。

private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    var treeViewItem = VisualUpwardSearch<TreeViewItem>(e.OriginalSource as DependencyObject) as TreeViewItem;
    if (treeViewItem != null)
    {
        treeViewItem.Focus();
        e.Handled = true;
    }
}

static DependencyObject VisualUpwardSearch<T>(DependencyObject source)
{
    while (source != null && source.GetType() != typeof(T))
        source = VisualTreeHelper.GetParent(source);

    return source;
}

現(xiàn)在才是一個(gè)比較完美的解決方案。  

到此這篇關(guān)于WPF實(shí)現(xiàn)右鍵選定TreeView的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#控件picturebox實(shí)現(xiàn)圖像拖拽和縮放

    C#控件picturebox實(shí)現(xiàn)圖像拖拽和縮放

    這篇文章主要為大家詳細(xì)介紹了C#控件picturebox實(shí)現(xiàn)圖像拖拽和縮放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • C#獲取某路徑文件夾中全部圖片或其它指定格式的文件名的實(shí)例方法

    C#獲取某路徑文件夾中全部圖片或其它指定格式的文件名的實(shí)例方法

    在本篇文章里小編給大家整理的是關(guān)于C#獲取某路徑文件夾中全部圖片或其它指定格式的文件名的實(shí)例方法,需要的朋友們參考下。
    2019-10-10
  • C#?從字符串中分離文件路徑、文件名及擴(kuò)展名的操作

    C#?從字符串中分離文件路徑、文件名及擴(kuò)展名的操作

    在C#中,處理文件時(shí)經(jīng)常需要分離文件路徑、文件名和擴(kuò)展名,通過(guò)使用Microsoft.Win32命名空間和字符串處理方法如Substring、IndexOf()和LastIndexOf(),可以有效地獲取和操作這些信息,本文介紹C#?字符串中分離文件路徑,感興趣的朋友一起看看
    2024-09-09
  • c#中的擴(kuò)展方法學(xué)習(xí)筆記

    c#中的擴(kuò)展方法學(xué)習(xí)筆記

    擴(kuò)展方法能夠向現(xiàn)有類型“添加”方法,而無(wú)需創(chuàng)建新的派生類型,重新編譯或以其他方式修改原始類型。下面這篇文章主要給大家介紹了關(guān)于c#中擴(kuò)展方法學(xué)習(xí)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-11-11
  • C#實(shí)現(xiàn)常見(jiàn)加密算法的示例代碼

    C#實(shí)現(xiàn)常見(jiàn)加密算法的示例代碼

    這篇文章主要為大家詳細(xì)介紹一下C#中一些常見(jiàn)加密算法(Base64編碼、凱撒密碼、Vigenere密碼、DES、AES)以及它們的實(shí)現(xiàn)代碼,感興趣的可以了解一下
    2022-07-07
  • C#迭代器模式(Iterator Pattern)實(shí)例教程

    C#迭代器模式(Iterator Pattern)實(shí)例教程

    這篇文章主要介紹了C#迭代器模式(Iterator Pattern),包括了迭代器的適用范圍及用法實(shí)例,需要的朋友可以參考下
    2014-09-09
  • C# 多線程中經(jīng)常訪問(wèn)同一資源可能造成哪些問(wèn)題

    C# 多線程中經(jīng)常訪問(wèn)同一資源可能造成哪些問(wèn)題

    這篇文章主要介紹了C# 多線程中經(jīng)常訪問(wèn)同一資源可能造成哪些問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • C# winfrom 模擬ftp文件管理實(shí)現(xiàn)代碼

    C# winfrom 模擬ftp文件管理實(shí)現(xiàn)代碼

    從網(wǎng)上找到的非常好用的模擬ftp管理代碼,整理了一下,希望對(duì)需要的人有幫助
    2014-01-01
  • C# OCR實(shí)現(xiàn)文字識(shí)別功能

    C# OCR實(shí)現(xiàn)文字識(shí)別功能

    OCR,中文叫做光學(xué)字符識(shí)別。它是利用光學(xué)技術(shù)和計(jì)算機(jī)技術(shù)把印在或?qū)懺诩埳系奈淖肿x取出來(lái),并轉(zhuǎn)換成一種計(jì)算機(jī)能夠接受、人又可以理解的格式。本文將利用OCR實(shí)現(xiàn)文字識(shí)別功能,感興趣的可以了解一下
    2022-11-11
  • C#設(shè)置或驗(yàn)證PDF文本域格式的方法詳解

    C#設(shè)置或驗(yàn)證PDF文本域格式的方法詳解

    PDF中的文本域可以通過(guò)設(shè)置不同格式,用于顯示數(shù)字、貨幣、日期、時(shí)間、郵政編碼、電話號(hào)碼和社保號(hào)等等。本文將介紹如何通過(guò)C#設(shè)置或驗(yàn)證PDF文本域格式,需要的可以參考一下
    2022-01-01

最新評(píng)論

卢氏县| 庄河市| 汕尾市| 合阳县| 德惠市| 明光市| 巩留县| 土默特左旗| 广汉市| 宜兰县| 开封市| 富蕴县| 日土县| 东海县| 罗山县| 铜鼓县| 榆社县| 宿松县| 临桂县| 福安市| 五峰| 隆化县| 沂南县| 雅安市| 涿州市| 襄樊市| 英超| 石台县| 白玉县| 曲周县| 闽清县| 屏山县| 呼图壁县| 灵丘县| 堆龙德庆县| 志丹县| 临清市| 莱西市| 安溪县| 武邑县| 翁牛特旗|