ストーリーボードがWPF依存プロパティをアニメーション化するため、アニメーションにWPFストーリーボードを使用することはできません。スクロールするにはScrollViewer.ScrollToHorizontalOffset(double)
に電話する必要があります。
OnDependencyPropertyChanged()関数でSetHorizontalOffsetを呼び出すカスタム依存関係プロパティを作成してみることもできます。その後、このプロパティをアニメートできます。
public static readonly DependencyProperty ScrollOffsetProperty =
DependencyProperty.Register("ScrollOffset", typeof(double), typeof(YOUR_TYPE),
new FrameworkPropertyMetadata(0.0, new PropertyChangedCallback(OnScrollOffsetChanged)));
public double ScrollOffset
{
get { return (double)GetValue(ScrollOffsetProperty); }
set { SetValue(ScrollOffsetProperty, value); }
}
private static void OnScrollOffsetChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
YOUR_TYPE myObj = obj as YOUR_TYPE;
if (myObj != null)
myObj.SCROLL_VIEWER.ScrollToHorizontalOffset(myObj.ScrollOffset);
}
スクロールビューアを取得するには、VisualTreeHelperを使用してListBoxのビジュアルな子を検索できます。後で必要となるため、ScrollViewerへの参照を保存します。これを試してください:
public static childItem FindVisualChild<childItem>(DependencyObject obj)
where childItem : DependencyObject
{
// Iterate through all immediate children
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;
}
この関数は、パラメータタイプの最初の視覚的な子を返します。 FindVisualChild<ScrollViewer>(ListBox)
に電話してScrollViewerを入手してください。
最後に、UIElement.TranslatePoint(Point, UIElement)
を使用してアイテムのX位置を取得してみてください。アイテムに対してこの関数を呼び出し、ポイントの0,0を渡してScrollViewerを渡します。
これが役に立ちます。
私の主人は、かなり仕事です!助けをくれてありがとうジョシュ、それは正しい方向に少なくとも私を指摘している。 – Stimul8d
SetHorizontalOffsetではなくScrollToHorizontalOffsetを意味しますか? –
はい、そうです。ありがとう! –