Pregunta Desplazamiento automático molesto de elementos parcialmente visualizados en WPF ListView


tengo un Vista de la lista en WPFMi problema es si un elemento se muestra parcialmente y si hago clic en el elemento, la lista se desplazará automáticamente para que todo el elemento sea visible.

¿Cómo puedo desactivar esto? Desplazamiento automático ¿característica?

Gracias


5
2017-10-17 06:25


origen


Respuestas:


Tuve el mismo problema y he encontrado una mezcla :)

en el Xaml usted define un estilo para ListViewItem con este EventSetter:

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
         <EventSetter Event="RequestBringIntoView" Handler="ProjectListView_OnRequestBringIntoView"/>
    </Style>
</ListView.ItemContainerStyle>

en el código detrás:

private void ProjectListView_OnRequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
    e.Handled = true;
}

Espero que esto también funcione para ti :)


10
2018-03-04 15:15



El comportamiento predeterminado de ListView es llamar BringIntoView() después de que se hizo clic. Puede agregar un controlador de eventos a PreviewMouseDown evento y manejarlo por conjunto e.Handled = true;.


1
2017-10-17 06:33



Encontré una solución, mi vista de lista muestra elementos de foto en MVVM

private void lv_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        var p=e.OriginalSource as FrameworkElement;
        if (p != null && p.DataContext is **Photo**)
        {
            lv.SelectedItem = p.DataContext;
            e.Handled = true;
        }
    }

1
2017-10-17 07:01



Siguiendo la respuesta de Ekk, debe manejar el evento bringIntoView NO en la lista de padres, sino en el evento de los niños. En mi caso peculiar, por ejemplo, mi listBox tiene algunos elementos de creación de código de tiempo de ejecución. Esos pueden ser básicamente un panel de pila de texto o, al final, un panel de pila de botones.

enter image description here

A pesar del hecho de cómo se hacen, acabo de tener agregado

btnOk.RequestBringIntoView += (s,e) => { e.Handled = true; };

para cada uno de ellos y el efecto fue que, después de hacer clic, no se pusieron a la vista, pero la acción asociada con cada uno de ellos se ejecutó de inmediato.


0
2017-09-06 13:22



Ajuste ScrollViewer.VerticalScrollBarVisibility="Auto" para la vista de lista ayudó.


-2
2018-02-06 07:38