无法在 ScrollViewer 中滚动 TreeView
Can't scroll TreeView inside a ScrollViewer
我在 ScrollViewer 中有一个 TreeView。
当我在 treeview 上转动鼠标滚轮 时,treeview 没有滑动,而是停留在同一点。但是当我移动滚动条时,我可以滑动树视图。
我很确定 treeview 有一个 scrollviewer,但我的意思是使用另一个 scrollviewer,我有一个 scrollviwer 模板,我在我的整个应用程序中都使用了这个模板。这就是为什么我想再次使用这个模板。
代码如下:
<ScrollViewer Template="{DynamicResource AppleStyleScrollBarStyle}">
<TreeView>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
</TreeView>
</ScrollViewer>
TreeView
默认模板已包含 ScrollViewer
。当你用另一个 ScrollViewer
包装它时, TreeView
里面的那个什么都不做,但仍然处理一些鼠标事件,比如鼠标滚轮。相反,您可以在 TreeView.Resources
中为 ScrollViewer
创建隐式 Style
<TreeView>
<TreeView.Resources>
<Style TargetType="{x:Type ScrollViewer}">
<Setter Property="Template" Value="{DynamicResource AppleStyleScrollBarStyle}"/>
</Style>
</TreeView.Resources>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
</TreeView>
这个答案帮助了我:
WPF Remove ScrollViewer from TreeView
https://serialseb.com/blog/2007/09/03/wpf-tips-6-preventing-scrollviewer-from/
只需订阅您的 treeView 的 PreviewMouseWheel 事件:
// https://serialseb.com/blog/2007/09/03/wpf-tips-6-preventing-scrollviewer-from/
private void treeView_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (sender is TreeView && !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。 当我在 treeview 上转动鼠标滚轮 时,treeview 没有滑动,而是停留在同一点。但是当我移动滚动条时,我可以滑动树视图。
我很确定 treeview 有一个 scrollviewer,但我的意思是使用另一个 scrollviewer,我有一个 scrollviwer 模板,我在我的整个应用程序中都使用了这个模板。这就是为什么我想再次使用这个模板。
代码如下:
<ScrollViewer Template="{DynamicResource AppleStyleScrollBarStyle}">
<TreeView>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
</TreeView>
</ScrollViewer>
TreeView
默认模板已包含 ScrollViewer
。当你用另一个 ScrollViewer
包装它时, TreeView
里面的那个什么都不做,但仍然处理一些鼠标事件,比如鼠标滚轮。相反,您可以在 TreeView.Resources
ScrollViewer
创建隐式 Style
<TreeView>
<TreeView.Resources>
<Style TargetType="{x:Type ScrollViewer}">
<Setter Property="Template" Value="{DynamicResource AppleStyleScrollBarStyle}"/>
</Style>
</TreeView.Resources>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
</TreeView>
这个答案帮助了我: WPF Remove ScrollViewer from TreeView
https://serialseb.com/blog/2007/09/03/wpf-tips-6-preventing-scrollviewer-from/
只需订阅您的 treeView 的 PreviewMouseWheel 事件:
// https://serialseb.com/blog/2007/09/03/wpf-tips-6-preventing-scrollviewer-from/
private void treeView_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (sender is TreeView && !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);
}
}