Как удалить пробел из первого объекта списка пунктирной рамки и последнего объекта?

Я использую горизонтальное представление списка в списке пунктирной рамки. Который является, продолжают движение справа налево.

Мой код:

        double height = canMain.ActualHeight - marqueeList.ActualHeight;
        marqueeList.Margin = new Thickness(0, 0, 0, 0);
        doubleAnimation.From = -marqueeList.ActualWidth;
        doubleAnimation.To = canMain.ActualWidth;
        doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
        doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(_marqueeTimeInSeconds));
        Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Right)"));
        _storyBoard.Children.Add(doubleAnimation);
        _storyBoard.Begin(marqueeList, true)

Но после того как это перемещается полностью существует пробел, прибывший до снова, первый объект не прибывается. Я хочу удалить пробел между первыми объектами для длительности объекта. (Как проспект)

1
задан Cœur 24 March 2018 в 13:21
поделиться

1 ответ

Если элементы ListView не требуют взаимодействия с мышью или клавиатурой, вы можете просто поместить прямоугольник с визуальной кистью справа от него:

<DockPanel Name="marqueeListTwice">
  <ListView Name="marqueeList" .../>
  <Rectangle Height="{Binding RenderHeight,ElementName=marqueeList}"
               Width="{Binding RenderWidth,ElementName=marqueeList}">
    <Rectangle.Fill>
      <VisualBrush Visual="{Binding ElementName=marqueeList}" />
    </Rectangle.Fill>
  </Rectangle>
</DockPanel>

Теперь эта DockPanel будет выглядеть как две боковые копии ListView: Тот, что слева - настоящий, а тот, что справа - Прямоугольник, нарисованный его изображением. Механизм рисования VisualBrush "идеален" в том смысле, что вы не сможете отличить нарисованную копию от настоящей.

Теперь вы можете анимировать элемент управления "marqueeListTwice" по холсту на расстояние, равное marqueeList.ActualWidth. Когда вы дойдете до конца, будет казаться, что вы смотрите на первый элемент, но на самом деле вы будете смотреть на его изображение, нарисованное на прямоугольнике. Когда вы вернетесь к 0, "настоящий" первый элемент снова будет виден, но поскольку он визуально идентичен, вы не получите даже мерцания.

Если вам нужно, чтобы отдельные элементы взаимодействовали с мышью во время панорамирования, это решение не сработает, потому что нарисованный прямоугольник не будет реагировать так, как ожидается: Вам понадобится логика для перемещения отдельных элементов вместо перемещения ListView, содержащего их все. Вы можете использовать для этого анимацию: Просто анимируйте свойство окна-контейнера или UserControl и используйте его для расчета позиционирования элементов.

2
ответ дан 2 September 2019 в 23:42
поделиться
Другие вопросы по тегам:

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