ListViewのControlTemplateにあるScrollViewerを取得すると、これを行うことができます。 ScrollViewerにアクセスすると、スクロール方法が異なるa lotが公開されます。我々はまた、我々はからScrollViewerのを取得するために使用できるものが必要になります
<ListView ItemsSource="{Binding Percents}"
SelectionChanged="OnSelectionChanged"
x:Name="uiListView"/>
public List<int> Percents { get; set; }
public Window1()
{
InitializeComponent();
Percents = new List<int>();
for (int i = 1; i <= 100; i++)
{
Percents.Add(i);
}
this.DataContext = this;
}
:
まず、我々はこの効果を追加したいリストビューを作成することができますリストビュー。私はカスタムスクロールで作業する前にこれと似たようなものを使用しました。ここでも同様に使用できます。
public static DependencyObject GetScrollViewer(DependencyObject o)
{
if (o is ScrollViewer)
{ return o; }
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++)
{
var child = VisualTreeHelper.GetChild(o, i);
var result = GetScrollViewer(child);
if (result == null)
{
continue;
}
else
{
return result;
}
}
return null;
}
これで、SelectionChangedイベントを処理するだけで済みます。アイテムをリストの一番上にスクロールしようとしているので、最下部までスクロールしてから、選択したアイテムまでスクロールすることをお勧めします。あなたが言ったように、ScrollIntoViewはアイテムが見えるようになるまでスクロールするので、選択したアイテムがスクロールバックして一番上に来ると、選択したアイテムがリストの一番上に表示されなくなります。
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
ScrollViewer scrollViewer = GetScrollViewer(uiListView) as ScrollViewer;
scrollViewer.ScrollToBottom();
uiListView.ScrollIntoView(e.AddedItems[0]);
}
パーフェクト:)ありがとう – Ray
それは私の魅力のように動作します。ありがとう!!! – thowa
注:WPF拡張ツールキットを使用している場合は、1行のコードでScrollViewerを取得できます。VisualTreeHelperEx.FindDescendantByType(YourListView); –