滚动视图内的网格不滚动鼠标滚轮

问题描述:

我有一个网格中的列包含3 GroupBoxe s。最后的GroupBox有一个Grid包含两个元素:ButtonTreeView(垂直)。 TreeView应具有动态高度,因为它包含可以展开/折叠的元素。滚动视图内的网格不滚动鼠标滚轮

包含所有元素的窗口可以由用户调整大小。

如果窗口很小,则看不到所有的组框,所以我需要一个滚动条。我可以向下滚动,但如果我想通过鼠标滚轮在TreeView内滚动,则不会发生任何事情。

这是我的代码:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <GroupBox Header="Test 1" Grid.Row="0">...</GroupBox> 

    <GroupBox Header="Test 2" Grid.Row="1">...</GroupBox> 

    <GroupBox Header="Test 3" Grid.Row="2"> 

     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 

      <CheckBox Content="All" Grid.Row="0"/> 

      <TreeView x:Name="NameTree" 
       Grid.Row="1" 
       ItemsSource="{Binding Names}"/> 
     </Grid> 

    </GroupBox> 

</Grid> 

一种解决方法可能是第3行设置为一个固定的大小,而不是使用*。在这种情况下,我将在两个滚动条(在ScrollViewer中和的TreeView滚动条,但我希望第3组框的动态高度

你必须“重定向”的PreviewMouseWheel事件父:

<TreeView PreviewMouseWheel="TreeView_MouseWheel" > 
         <TreeViewItem Header="North America"> 
          <TreeViewItem Header="USA"></TreeViewItem> 
          <TreeViewItem Header="Canada"></TreeViewItem> 
          <TreeViewItem Header="Mexico"></TreeViewItem> 
         </TreeViewItem> 
         <TreeViewItem Header="South America"> 
          <TreeViewItem Header="Argentina"></TreeViewItem> 
          <TreeViewItem Header="Brazil"></TreeViewItem> 
          <TreeViewItem Header="Uruguay"></TreeViewItem> 
</TreeViewItem> 

后面的代码:

private void TreeView_MouseWheel(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); 
     } 
    } 

WPF Remove ScrollViewer from TreeView