WPF中關於自定義控件的滾動條鼠標停留在內容上鼠標滾輪滾動無效的問題


問題起因:在一個用戶控件里放置了1TreeView垂直順序放置。 當用戶控件中的內容超過面板大小時,滾動條會自動出現 ,但是只有當鼠標指示在右邊滾動條的那一條位置時,才支持鼠標滾軸滾動。 點在控件內部時滾軸無效。

問題分析:由於設置了d:designheight,自定義控件的寬高都是隨着父容器的變化而變化的,於是我將Height設為較小的固定高度時,發現鼠標停留在控件內容時,滾輪控制滾動條滾動是有效的。這就說明UI上顯示的滾動條並非是這個自定義控件的,而是這個自定義控件所在的父容器的,這樣也解釋了為什么之前在內容上滾動無效,但是在滾動條上是可以滾動的原因,然后接下來就好辦了。代碼如下:

//在構造函數中綁定treeview的鼠標滾輪事件,原因是在xmal前台綁定時觸發不了MouseWheel事件
public TreeViewList()
        {
            InitializeComponent();
            treeview.AddHandler(TreeView.MouseWheelEvent, new MouseWheelEventHandler(treeview_MouseWheel), true);
        }

//根據父控件對象查找指定類型的子控件
private T GetVisualChild<T>(DependencyObject parent) where T : Visual
        {
            T child = default(T);
            int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
            for (int i = 0; i < numVisuals; i++)
            {
                Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
                child = v as T;
                if (child == null)
                {
                    child = GetVisualChild<T>(v);
                }
                if (child != null)
                {
                    break;
                }
            }
            return child;
        }

private void treeview_MouseWheel(object sender, MouseWheelEventArgs e)
        {
            //在treeview的基礎上,層層查找,直到找到它的父容器,是個NavToolbar(滾動條是NavToolbar的滾動條,並非treeview的)
            try
            {
                var scroll =
                GetVisualChild<ScrollViewer>(
                    ((((((((treeview.Parent as Grid).Parent as ChapterList).Parent as Grid).Parent as ScrollViewer).
                            Parent as Border).Parent as Grid).Parent as Grid).Parent as Border).Parent);
                if (scroll != null)
                {
                    scroll.ScrollToVerticalOffset(scroll.VerticalOffset - e.Delta);
                }
            }
            catch (Exception)
            {
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM