如何从选取框列表的第一个项目和最后一个项目中删除空格?

时间:2010-06-17 10:53:59

标签: wpf

我在选取框列表中使用水平列表视图。哪个是从右到左继续前进。

我的代码是:

        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 个答案:

答案 0 :(得分:2)

如果您的ListView项目不需要鼠标或键盘交互,您可以在其右侧放置一个带有可视刷的Rectangle:

<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他们都是。您仍然可以使用动画来执行此操作:只需为容器Window或UserControl的属性设置动画,然后使用它来计算项目位置。