WPF ListBox のスクロールバーの位置をプログラムで設定できますか? デフォルトでは、中央に配置したいと思います。
Scott
質問する
20934 次
5 に答える
7
リストボックスの垂直スクロールバーを移動するには、次の手順を実行します。
- リストボックスに名前を付けます(x:Name = "myListBox")
- ウィンドウのLoadedイベントを追加します(Loaded = "Window_Loaded")
- メソッドを使用して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);
}
}
}
于 2010-06-12T16:08:00.273 に答える
3
Dim cnt as Integer = myListBox.Items.Count
Dim midPoint as Integer = cnt\2
myListBox.ScrollIntoView(myListBox.Items(midPoint))
また
myListBox.SelectedIndex = midPoint
真ん中のアイテムを表示するか、選択するかによって異なります。
于 2008-10-01T20:31:52.287 に答える
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));
于 2012-06-25T20:12:29.127 に答える
0
MusicList という名前の ListView があります。MusicList は、音楽を再生した後、次の要素に自動的に移動します。Player.Ended イベントのイベント ハンドラーを次のように作成します (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);
}
}
}
一番下にある次の要素を取得します。
于 2019-12-05T03:06:00.040 に答える
-1
ListBoxesにはそれがないと思いますが、ListViewsには、アイテムが表示されていることを確認するためにスクロールバーを必要な場所に移動するEnsureVisibleメソッドがあります。
于 2008-10-01T20:23:30.247 に答える