13 Stimmen

Lästiges automatisches Scrollen von teilweise angezeigten Elementen in WPF ListView

Ich habe eine ListView en WPF Mein Problem ist, wenn ein Element teilweise angezeigt wird und ich auf das Element klicke, wird die Liste automatisch gescrollt, so dass das gesamte Element sichtbar ist.

Wie kann ich diese Funktion deaktivieren? Automatisches Blättern Funktion?

Dankeschön

22voto

user3379493 Punkte 191

Hatte das gleiche Problem und ich habe eine Lösung gefunden :)

in der Xaml definieren Sie einen Stil für das ListViewItem mit diesem EventSetter:

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

im Code dahinter:

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

Ich hoffe, das funktioniert auch bei Ihnen :)

2voto

Ekk Punkte 5529

Das Standardverhalten von ListView ist der Aufruf von BringIntoView() nachdem sie angeklickt wurde. Sie können einen Event-Handler hinzufügen zu PreviewMouseDown Ereignis und behandeln es mit set e.Handled = true; .

1voto

AVEbrahimi Punkte 15160

Ich fand eine Arbeit herum, meine ListView zeigt Foto Elemente in 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;
        }
    }

1voto

Patrick Punkte 2698

In Anlehnung an die Antwort von Ekk müssen Sie das bringIntoView-Ereignis NICHT auf dem übergeordneten listView behandeln, sondern im Ereignis der Kinder. In meinem speziellen Fall hat zum Beispiel meine ListBox einige Elemente, die durch Laufzeitcode erstellt werden. Diese können grundsätzlich Stackpanel von Textboxen oder am Ende ein Stackpanel von Schaltflächen sein.

enter image description here

Trotz der Tatsache, wie diese hergestellt werden, habe ich gerade hinzugefügt

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

und der Effekt war, dass sie nach dem Anklicken nicht angezeigt wurden, sondern die mit ihnen verbundene Aktion sofort ausgeführt wurde.

-3voto

Vardan Punkte 1

Einstellung ScrollViewer.VerticalScrollBarVisibility="Auto" für die Listenansicht geholfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X