<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=test}"></DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid Template="{DynamicResource TemplateDataGridPrintAndExport}"/>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid/>我有一个像上面那样的数据。Datgrid的行详细信息模板还包含一个数据集。当单击父列时,将填充内部数据。我的问题是:如果实现了行细节模板数据集,并且用户鼠标在上面盘旋,而滚动父数据集则不起作用。用户应将鼠标悬停到要滚动的主数据to上。然而,它并不是用户友好的。我怎样才能防止这样的内心暴躁行为呢?
发布于 2014-10-14 08:46:32
我通过尝试其他方法找到了灵魂:
<DataGrid ScrollViewer.CanContentScroll="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=test}"></DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid Template="{DynamicResource TemplateDataGridPrintAndExport}" IsReadOnly="True" ScrollViewer.CanContentScroll="False" IsEnabled="False"/>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid/>解决方案是将ScrollViewer.CanContentScroll="False"属性赋予外部数据网格,将IsReadOnly="True" ScrollViewer.CanContentScroll="False" IsEnabled="False"属性赋予内部数据网格。现在,它正在顺利地滚动,并与父数据集相关联。
发布于 2018-09-28 10:27:26
我想提出两种备选解决办法,因为所选择的办法具有严重的副作用。其中之一被改善-你失去了与嵌套DataGrid及其子控件交互的能力。第二,控制者在残疾状态下的外观变化。
IsReadOnly="True"改为IsHitTestVisible="False"。这将修复外观副作用,但您仍然无法与内部控件交互(使用鼠标)。代码:
PreviewMouseWheel中捕获RowDetailsTemplate控件中的隧道事件,并将其作为冒泡事件传递给父事件。这将有效地使RowDetailsTemplate中的控件只对鼠标滚动视而不见,并允许上面的控件在可视树中任意处理它。xaml:
代码背后:
private void DataGrid_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (e.Handled)
{
return;
}
Control control = sender as Control;
if(control == null)
{
return;
}
e.Handled = true;
var wheelArgs = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
{
RoutedEvent = MouseWheelEvent,
Source = control
};
var parent = control.Parent as UIElement;
parent?.RaiseEvent(wheelArgs);
}发布于 2020-01-28 08:17:45
如果您使用的是.NET 4.5及以上版本,您可以在外部网格上使用VirtualizingPanel.ScrollUnit="Pixel",这将允许您按像素滚动,而不是按单位(项)滚动,因为当大的内部DataGrid开始跳跃时,这会导致相当奇怪的行为。
然后,您可以使用内部PreviewMouseWheel事件将滚动事件传递给父事件,因为它是由内部控件捕获的。
Xaml:
<DataGrid VirtualizingPanel.ScrollUnit="Pixel">
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid PreviewMouseWheel="DataGrid_PreviewMouseWheel"/>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>政务司司长:
private void DataGrid_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
e.Handled = true;
var parent = ((Control)sender).Parent as UIElement;
parent?.RaiseEvent(new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
{
RoutedEvent = MouseWheelEvent,
Source = sender
});
}https://stackoverflow.com/questions/23524192
复制相似问题