tutorial net ejemplos asp c# .net wpf listview

c# - net - wpf xaml



¿Cómo puedo desplazar programáticamente una vista de lista de WPF? (2)

¿Es posible desplazar programáticamente una vista de lista de WPF? Sé que Winforms no lo hace, ¿verdad?

Estoy hablando de, por ejemplo, desplazar 50 unidades hacia arriba o hacia abajo, etc. No desplazar una altura completa del elemento a la vez.


¿Has probado ScrollIntoView ? Alternativamente, si no es un elemento específico que trajo a la vista, sino un desplazamiento desde la posición actual, puede usar BringIntoView .


Sí, tendrá que tomar ScrollViwer de ListView, o una vez que tenga acceso a él, puede usar los métodos expuestos o anular el desplazamiento. También puede desplazarse obteniendo el área de contenido principal y utilizando su implementación de la interfaz IScrollInfo .

Aquí hay un pequeño ayudante para obtener el componente ScrollViwer de algo como ListBox, ListView, etc.

public static DependencyObject GetScrollViewer(DependencyObject o) { // Return the DependencyObject if it is a ScrollViewer if (o is ScrollViewer) { return o; } for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++) { var child = VisualTreeHelper.GetChild(o, i); var result = GetScrollViewer(child); if (result == null) { continue; } else { return result; } } return null; }

Y luego puedes usar .LineUp () y .LineDown () de esta manera:

private void OnScrollUp(object sender, RoutedEventArgs e) { var scrollViwer = GetScrollViewer(uiListView) as ScrollViewer; if (scrollViwer != null) { // Logical Scrolling by Item // scrollViwer.LineUp(); // Physical Scrolling by Offset scrollViwer.ScrollToVerticalOffset(scrollViwer.VerticalOffset + 3); } } private void OnScrollDown(object sender, RoutedEventArgs e) { var scrollViwer = GetScrollViewer(uiListView) as ScrollViewer; if (scrollViwer != null) { // Logical Scrolling by Item // scrollViwer.LineDown(); // Physical Scrolling by Offset scrollViwer.ScrollToVerticalOffset(scrollViwer.VerticalOffset + 3); } } <DockPanel> <Button DockPanel.Dock="Top" Content="Scroll Up" Click="OnScrollUp" /> <Button DockPanel.Dock="Bottom" Content="Scroll Down" Click="OnScrollDown" /> <ListView x:Name="uiListView"> <!-- Content --> </ListView> </DockPanel>

El desplazamiento lógico expuesto por LineUp y LineDown sigue desplazándose por elemento, si desea desplazarse en una cantidad determinada, debe usar el ScrollToHorizontal / VerticalOffset que he usado anteriormente. Si también desea un desplazamiento más complejo, mire la respuesta que he proporcionado en esta otra pregunta .