2008-10-01 6 views

ответ

7

Чтобы переместить вертикальную полосу прокрутки в ListBox сделайте следующее:

  1. Имя Вашего поля списка (х: Name = "MyListBox")
  2. Добавить Loaded события для окна (Loaded = "Window_Loaded «)
  3. Реализовать Loaded событие, используя метод: ScrollToVerticalOffset

Вот рабочий пример:

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); 
    } 
    } 
} 
+1

Это отлично подойдет для меня. – 2010-09-23 17:24:32

-1

Я не думаю, что у ListBox есть это, но у ListViews есть метод EnsureVisible, который перемещает полосу прокрутки туда, где нужно, чтобы убедиться, что объект показан.

+0

EnsureVisible - это функция windows.Forms, вопрос был о WPF. Насколько я могу судить, в WPF нет метода EnsureVisible. – Sam 2008-10-17 12:19:01

3
Dim cnt as Integer = myListBox.Items.Count 
Dim midPoint as Integer = cnt\2 
myListBox.ScrollIntoView(myListBox.Items(midPoint)) 

или

myListBox.SelectedIndex = midPoint 

Это зависит от того, если вы хотите, средний пункт только что показано, или выбран.

+0

это просто прокручивает его в поле зрения. Мне нужно, чтобы он прокручивался прямо к центру. Но спасибо – ScottG 2008-10-03 14:17:01

0

Я только изменил немного кода Zamboni и добавил вычисление положения.

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)); 

 Смежные вопросы

  • Нет связанных вопросов^_^