ScrollViewer内の特定のControlを画面上に固定する方法
指定したIDを持つControlをScrollViewerの先頭にピン止めしたいのですが、どのような方法を取れば対象となるUIElementの表示位置を固定できるでしょうか?
動きの例としては、以下の様なイメージです。
ItemsSourceにObservableCollection<int>をBindingしたListViewに、1~1000の数値がTextBlockで縦方向のリストとして表示されている- 1~1000が表示された
TextBlockは、一定時間ごとにランダムに順番が入れ替わる - ユーザーは特定の番号を
TextBoxへの入力などで指定すると、その番号の表示されたTextBlockがぴったりListViewの一番上に表示され、その番号の順番が入れ替わっても、その状況が保持されつづける(=自動的に適切な位置にスクロールする)
ListView.ItemContainerGenerator.ContainerFromItem(...)で取得したVisualをVisual.PointToScreen(...)で変換して、その位置にScrollViewer.ScrollToVerticalOffset(...)をすれば…
という事を考えたのですが、順番入れ替えを検知する方法がINotifyCollectionChangedしか見つからず、CollectionChangedイベントを起点にUIElementを取ろうとするとVisualTreeの作成途中なのか、上手くコントロールを取得できませんでした。
このような場合に上手く機能を実現するには、どのような方法があるでしょうか?