2015-12-02 151 views
0

我有一個網格中的列包含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組框的動態高度

回答

2

你必須「重定向」的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