Problem:
If my DataGrid
is not entirely visible (horizontal & vertical scrollbars are showing) and I click on one of my cells that is partially visible, the grid auto-scrolls to bring that cell into view. I don't want this to happen. I've tried playing around with RequestBringIntoView
, like this:
private void DataGrid_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
e.Handled = true;
}
But that does nothing.
Things I've tried:
UserControls
; I tried putting an event handler for RequestBringIntoView
on all UserControls
that make up my cells, and tried handling the event, thinking that maybe I wasn't doing enough by just handling RequestBringIntoView
on the DataGrid
itself. This did not work.DataGrid
inside of a ScrollViewer
, and handled the ScrollViewer
's RequestBringIntoView
event. This actually works, and stops the auto-scrolling behavior, but in my case hosting a DataGrid
inside of a ScrollViewer
is not at all desirable, so I need to come up with a different solution.I'm not sure how to stop this behavior, any ideas?
Define an EventSetter
in the DataGrid.RowStyle
to call a handler that prevents the row from being brought into view:
XAML
<DataGrid>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<EventSetter Event="Control.RequestBringIntoView" Handler="DataGrid_Documents_RequestBringIntoView" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
Handler
private void DataGrid_Documents_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
e.Handled = true;
}