簡體   English   中英

WPF從TreeView中刪除ScrollViewer

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM