当前位置:  开发笔记 > 编程语言 > 正文

WPF - Animate ListBox.ScrollViewer.Horizo​​ntalOffset?

如何解决《WPF-AnimateListBox.ScrollViewer.Horizo​​ntalOffset?》经验,为你挑选了1个好方法。

我有一个Visuals 的集合ListBox.我需要找到XPosition里面的一个元素,然后动画HorizontalOffset中的ListBoxScrollViewer.基本上我想创建一个动画ScrollIntoView方法.

这给了我一些问题.首先,我如何获得对ListBoxs scrollviewer 的引用?其次,我怎样才能获得相对XPositionHozintalOfffset任意元素ListBox

我并没有对ListBox自身的任何输入做出反应,因此我无法使用Mouse相关属性.



1> Josh G..:

我不认为你能够使用WPF故事板来制作动画,因为故事板可以为WPF依赖属性设置动画.你需要打电话ScrollViewer.ScrollToHorizontalOffset(double)滚动.

您可以尝试创建一个在OnDependencyPropertyChanged()函数中调用SetHorizo​​ntalOffset的自定义依赖项属性.然后你可以动画这个属性.

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(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(child);

         if (childOfChild != null)
            return childOfChild;
      }
   }

   return null;
}

此函数返回参数类型的第一个可视子元素.打电话FindVisualChild(ListBox)来获取ScrollViewer.

最后,尝试使用UIElement.TranslatePoint(Point, UIElement)获取项目的X位置.在项目上调用此函数,为该点传递0,0,并传入ScrollViewer.

希望这可以帮助.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有