そのフィルとあなたの権利について聞いたことがあります。数値のアップダウンの置き換えを行っています。
その特定のコントロールはもともとフレームワークの一部ではなかったので、おそらく実行可能な代替手段があると思いました。また、私はそれの多くが機能しており、結果とテーマを取り上げる方法が本当に気に入っています.
このアプリケーションのコアは将来のアプリケーションの出発点になるため、この機能を含めたいと考え、そのために少し作業を行う準備ができていました。
私がやったことは少し複雑でしたが、便利なヘルパー関数で簡単になりました。ターゲット タイプの「ビジュアル ツリー」を検索する必要がありました。そこから、仕上げるのに十分な機能にアクセスできました。
最初:ここで見つけたヘルパー関数を使用して(Bruno に感謝)、これを Loaded イベントに追加することができました。
private Double currentVerticalOffset;
private void Page_Loaded_1(object sender, RoutedEventArgs e)
{
ScrollViewer sv = Helpers.ViewHelpers.ListBoxHelper.FindVisualChild<ScrollViewer>(listbox);
sv.ScrollChanged += HandleRankScrollChange;
currentVerticalOffset = sv.VerticalOffset;
}
次に、スクロール変更イベントを処理します。
private void HandleRankScrollChange(object sender, ScrollChangedEventArgs e)
{
ScrollViewer sv = Helpers.ViewHelpers.ListBoxHelper.FindVisualChild<ScrollViewer>(listbox);
if (sv.VerticalOffset > currentVerticalOffset)
{
Helpers.ViewHelpers.ListBoxHelper.SelectNextItem(listbox);
}
if (sv.VerticalOffset < currentVerticalOffset)
{
Helpers.ViewHelpers.ListBoxHelper.SelectPreviousItem(listbox);
}
currentVerticalOffset = sv.VerticalOffset;
}
ここで呼び出すヘルパーは非常に単純ですが、これも基本キットになるので、メソッドがあると再び便利になるでしょう。
public static void SelectNextItem(ListBox lb)
{
if (lb.SelectedIndex < lb.Items.Count)
{
lb.SelectedIndex++;
}
}
public static void SelectPreviousItem(ListBox lb)
{
if (lb.SelectedIndex > 0)
{
lb.SelectedIndex--;
}
}
ブルーノのヘルパー関数
public static childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem)
{
return (childItem)child;
}
else
{
childItem childOfChild = FindVisualChild<childItem>(child);
if (childOfChild != null)
{
return childOfChild;
}
}
}
return null;
}
再度、感謝します。