WPF - Animate ListBox.ScrollViewer.HorizontOffset?

0 - возможное возвращаемое значение из strpos, когда оно находит совпадение в самом начале. Если совпадение не найдено, оно возвращает false (boolean). Поэтому вам нужно проверить возвращаемое значение strpos, используя оператор ===, который проверяет значение и тип, а не используя ==, который просто проверяет значение.

13
задан WendiKidd 8 August 2012 в 03:40
поделиться

1 ответ

Я не думаю, что Вы будете в состоянии использовать раскадровку WPF для анимации, потому что раскадровки анимируют свойства зависимости WPF. Необходимо будет звонить ScrollViewer.ScrollToHorizontalOffset(double) для прокрутки.

Вы могли попытаться создать пользовательское свойство зависимости, которое называет SetHorizontalOffset в OnDependencyPropertyChanged () функцией. Тогда Вы могли анимировать это свойство.

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.

Hope это помогает.

33
ответ дан Josh G 8 August 2012 в 14:40
поделиться
  • 1
    @Dason, Мой начальный вопрос довольно стар. Я опубликовал пакет (www.ggtern.com), который должен был исправить некоторые функции ggplot2 для обеспечения дополнительного размера, и, много новых элементов темы. Мой пакет является эффективно " extension" к ggplot2, для очень конкретного случая, а именно, графическое изображение троичных схем. Короче говоря, assignInNamespace (...) не МОЖЕТ использоваться всегда безотносительно. Вот некоторая дополнительная информация о том, что я закончил тем, что делал: groups.google.com/forum/#!topic/ggplot2/SZX-SF9UCRo – Nicholas Hamilton 3 January 2014 в 09:48
Другие вопросы по тегам:

Похожие вопросы: