最近在做項目的時候,發現listBoxzi自帶的垂直滾動條有問題,經常在Add(item)的時候下面會多出一些空白的部分,而且滾動條的長度也是無規則的,一會大一會小,而且無法控制橫豎滾動條的顯隐藏,并沒有找到滾動條的屬性,有人會說在xmal裡改就好啦,我是使用C#背景代碼寫的,是以很難拿到滾動條,當然可以把滾動條摳出來,但是有點繁瑣了
索性就直接在listBox外面包裹一個ScrollViewer。
ScrollViewer中放一個listBox,可以拖動滾動條,但是滾輪上下滾動無效,後來找到原因,是因為listBox中自帶一個滾動條,滾輪上下滾動事件應該是被截獲了,而并沒有傳遞到ScrollViewer這一層導緻的,那麼怎麼解決呢?
很簡單,直接讓listBox.Enable=false或者listBox.IsHitTextVisable=false即可,但是這樣有個缺點,就是無法選中listBox中的内容了,那隻能用另一個方法,代碼如下:
ListBox.PreviewMouseWheel += (sender, e) =>
{
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
eventArg.RoutedEvent = UIElement.MouseWheelEvent;
eventArg.Source = sender;
ListBox.RaiseEvent(eventArg);
};
将listBox的滾動時間傳遞到上層,讓ScrollViewer去處理即可.