Kann ich programmgesteuert die Position der Bildlaufleiste einer WPF-ListBox festlegen? Standardmäßig möchte ich es in der Mitte gehen.
Dann wird es einfach angezeigt. Ich möchte, dass es bis zur Mitte scrollt. Aber danke
Kann ich programmgesteuert die Position der Bildlaufleiste einer WPF-ListBox festlegen? Standardmäßig möchte ich es in der Mitte gehen.
Um die vertikale Bildlaufleiste in einer ListBox zu verschieben, gehen Sie wie folgt vor:
Hier ist ein Arbeitsbeispiel:
XAML:
<Window x:Class="ListBoxScrollPosition.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="Window_Loaded"
Title="Main Window" Height="100" Width="200">
<DockPanel>
<Grid>
<ListBox x:Name="myListBox">
<ListBoxItem>Zamboni</ListBoxItem>
<ListBoxItem>Zamboni</ListBoxItem>
<ListBoxItem>Zamboni</ListBoxItem>
<ListBoxItem>Zamboni</ListBoxItem>
<ListBoxItem>Zamboni</ListBoxItem>
<ListBoxItem>Zamboni</ListBoxItem>
<ListBoxItem>Zamboni</ListBoxItem>
<ListBoxItem>Zamboni</ListBoxItem>
<ListBoxItem>Zamboni</ListBoxItem>
<ListBoxItem>Zamboni</ListBoxItem>
<ListBoxItem>Zamboni</ListBoxItem>
<ListBoxItem>Zamboni</ListBoxItem>
</ListBox>
</Grid>
</DockPanel>
</Window>
C#
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// Get the border of the listview (first child of a listview)
Decorator border = VisualTreeHelper.GetChild(myListBox, 0) as Decorator;
if (border != null)
{
// Get scrollviewer
ScrollViewer scrollViewer = border.Child as ScrollViewer;
if (scrollViewer != null)
{
// center the Scroll Viewer...
double center = scrollViewer.ScrollableHeight / 2.0;
scrollViewer.ScrollToVerticalOffset(center);
}
}
}
Ich habe gerade ein bisschen Code von Zamboni geändert und Positionsberechnung hinzugefügt.
var border = VisualTreeHelper.GetChild(list, 0) as Decorator;
if (border == null) return;
var scrollViewer = border.Child as ScrollViewer;
if (scrollViewer == null) return;
scrollViewer.ScrollToVerticalOffset((scrollViewer.ScrollableHeight/list.Items.Count)*
(list.Items.IndexOf(list.SelectedItem) + 1));
Ich habe eine ListView namens MusicList. MusicList wechselt nach dem Abspielen einer Musik automatisch zum nächsten Element. Ich erstelle einen Event-Handler für Player.Ended Ereignis wie folgt (a la Zamboni):
if (MusicList.HasItems)
{
Decorator border = VisualTreeHelper.GetChild(MusicList, 0) as Decorator;
if (border != null)
{
ScrollViewer scrollViewer = border.Child as ScrollViewer;
if (scrollViewer != null)
{
MusicList.ScrollIntoView(MusicList.SelectedItem);
}
}
}
Sie erhalten das nächste Element, das unten zu sehen ist.
Ich glaube nicht, dass ListBoxen das haben, aber ListViews haben die EnsureVisible Methode, die die Bildlaufleiste an die Stelle verschiebt, die erforderlich ist, um sicherzustellen, dass ein Element angezeigt wird.
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.