jam*_*dgb 1 wpf xaml datagrid scrollviewer wpfdatagrid
我有一个ItemsControl
模板,其中包含另一个模板,ItemsControl
其模板包含一个DataGrid
.
我希望能够滚动第一个ItemsControl
,因此我使用了ScrollViewer
.
问题是,当鼠标在两个ItemsControl
滚动工作中的任何一个上面时,但当鼠标结束时DataGrid
它不会.
你知道我怎么解决这个问题吗?
<TabItem Header="Summary">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="5" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="1"
VerticalScrollBarVisibility="Visible">
<ItemsControl Grid.Row="1"
ItemsSource="{Binding CheckResultViewModels}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<TextBlock FontSize="20" FontWeight="ExtraBold">
<Run Text="{Binding CheckResults.Count, Mode=OneWay}" />
<Run>Warnings</Run>
</TextBlock>
</StackPanel>
<ItemsControl Grid.Row="1"
ItemsSource="{Binding CheckResults}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Margin="5">
<DataGrid HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
AutoGenerateColumns="True"
AutoGeneratingColumn="DetailsDataGrid_AutoGeneratingColumn"
CanUserResizeRows="False"
IsReadOnly="True"
ItemsSource="{Binding ErrorData}"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
</TabItem>
Run Code Online (Sandbox Code Playgroud)
DataGrid在其默认模板中包含ScrollViewer.因此,当鼠标在DataGrid 上时,dataGrid的ScrollViewer会占用滚动事件,因此不会冒泡到父ScrollViewer.
如果您希望外部ScrollViewer滚动,您可以挂钩隧道PreviewMouseWheel
事件并手动滚动:
XAML:
<ScrollViewer Grid.Row="1"
VerticalScrollBarVisibility="Visible"
PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
<ItemsControl Grid.Row="1"
ItemsSource="{Binding CheckResultViewModels}">
...........
Run Code Online (Sandbox Code Playgroud)
代码背后:
private void ScrollViewer_PreviewMouseWheel(object sender,
MouseWheelEventArgs e)
{
ScrollViewer scrollViewer = (ScrollViewer)sender;
scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - e.Delta);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1022 次 |
最近记录: |