Ich versuche zu synchronisieren die horizontale Scroll-Position von 2 WPF Datagrid Kontrollen.Synchronisieren scroll Positionen für 2 WPF Datagrids
ich zum melde mich an ScrollChanged Ereignis des ersten Datagrid:
<toolkit:DataGrid x:Name="SourceGrid" ScrollViewer.ScrollChanged="SourceGrid_ScrollChanged">
ich ein zweites Datagrid haben:
<toolkit:DataGrid x:Name="TargetGrid">
im Ereignishandler ich versuchte, die IScrollInfo.SetHorizontalOffset
zu verwenden, aber achtet DataGrid nicht IScrollInfo
:
private void SourceGrid_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
((IScrollInfo)TargetGrid).SetHorizontalOffset(e.HorizontalOffset);
// cast to IScrollInfo fails
}
Gibt es einen anderen Weg, dies zu erreichen? Oder gibt es ein anderes Element auf TargetGrid, das die erforderlichen IScrollInfo
verfügbar macht, um die Synchronisation der Scroll-Positionen zu erreichen?
BTW, ich bin mit eingefrorenen Spalten, so kann ich nicht beide DataGrid-Steuerelemente mit ScrollViewers umbrechen.
Ja. Das gleiche habe ich in der Vergangenheit auch schon gemacht. Es scheint so, als müssten wir uns auf diese Weise nicht durch den visuellen Baum hacken. Nur ein weiterer Weg, WPF ist rau an den Rändern. – PeterAllenWebb
Seien Sie vorsichtig, wenn der Benutzer visuelle Themen ändert - Kontrollen erhalten dann neue Vorlagen (= neue visuelle Bäume) und Sie werden einen Verweis auf einen falschen Scrollviewer haben. Sie sollten in OnApplyTemplate reagieren und den tatsächlichen ScrollViewer jedes Mal nachschlagen, wenn er aufgerufen wird. Siehe http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.onapplytemplate.aspx –