[英]WPF Remove ScrollViewer from TreeView
我想知道是否可以輕松關閉TreeView的ScrollViewer。
我有一個帶網格的UserControl。 其中一個Cell在Stackpanel中有一些TreeView。 Control的高度根據TreeView的高度自動調整,因此不需要滾動條。
問題是:我在ListBox中有一堆具有自己的ScrollViewer,但是當我使用MouseWheel時,當你在TreeView上時滾動停止。
這是因為TreeView有自己的ScrollViewer來竊取MouseWheel。 我知道這可能是通過覆蓋控件模板來實現的,但我希望有一種更簡單的方法。
您可以使用此處描述的技術: http : //serialseb.blogspot.com/2007/09/wpf-tips-6-preventing-scrollviewer-from.html,以防止ScrollViewer處理鼠標滾輪事件。 將PreviewMouseWheel="HandlePreviewMouseWheel"
添加到TreeView並將HandlePreviewMouseWheel定義為:
private void HandlePreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (!e.Handled)
{
e.Handled = true;
var eventArg = new MouseWheelEventArgs(
e.MouseDevice, e.Timestamp, e.Delta);
eventArg.RoutedEvent = UIElement.MouseWheelEvent;
eventArg.Source = sender;
var parent = ((Control)sender).Parent as UIElement;
parent.RaiseEvent(eventArg);
}
}
但是,將控件模板更改為不包含ScrollViewer並不困難,因為TreeView的默認模板非常簡單,而且大部分復雜性都是處理ScrollViewer。 試着這樣做:
<TreeView.Template>
<ControlTemplate TargetType="TreeView">
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
SnapsToDevicePixels="true">
<ItemsPresenter/>
</Border>
</ControlTemplate>
</TreeView.Template>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.