iPhone喜欢在Silverlight ListBox上滚动

时间:2009-05-03 16:31:00

标签: silverlight animation listbox

我需要一个具有类似iPhone功能的列表框,用于Silverlight。也就是说,动画滚动,然后单击并拖动以滚动。基于拖动的“速度”,在鼠标向上事件之后滚动将继续一点。我搜索并发现没有控制供应商提供这个。所以问题是我应该如何构建它?我需要一些提示才能开始。

这个问题分为两部分:

第1部分,如何获得列表框的动画滚动。

第2部分,如何建立一个“可拖动的”滚动,我想我应该在上面画一个画布并跟踪mouseevent,并模拟一些物理。这里的一些提示会很棒。

感谢Larsi。

5 个答案:

答案 0 :(得分:3)

前段时间我做了一个像这样的控件。我所做的只是将一个堆叠面板放在画布中。只需在鼠标移动时调整整个堆栈面板的canvas.top(按下鼠标时)。要在鼠标添加后为滚动设置动画,您实际上只需要跟踪移动的数量并将动画应用到canvas.top属性。

答案 1 :(得分:2)

这是WPF的一个非常好的完整示例,它同时执行拖动滚动和自动轻弹/惯性滚动。我不确定如果需要更改任何内容以使其在Silverlight中有效。

http://sachabarbs.wordpress.com/2009/12/24/friction-scrolling-now-an-wpf-attached-behaviour-too/

如果您单击捕捉鼠标输入的子项(例如按钮),则只需注意按钮即可单击并拖动视图。我实际上最终修改了这个样本,所以你仍然可以在点击子项时拖动滚动,同时仍然允许孩子在不拖动滚动时接受鼠标输入。

答案 2 :(得分:1)

Silverlight 3比Silverlight 2更容易,但2中并非不可能。

来自MIX 09 Building Microsoft Silverlight Controls的视频应该对您有所帮助。

答案 3 :(得分:1)

Sacha Barber网站的另一篇文章:

http://sachabarber.net/?p=481

Jeremiah Morrill在自定义ContentControl中共享实现动画滚动的代码(使用随附的ScrollViewer进行模板化)

答案 4 :(得分:0)

<ScrollViewer x:Name="sv1" Width="500" Height="285">
   <StackPanel x:Name="sp1" Width="450" Height="285">
   </StackPanel>
</ScrollViewer>

通过设置pos。和否定。到scrollviewer内的stackpanel的边距 你可以创建一个滚动效果。

onScroll_Up()
{
  //Change this based on your scrollviewer dimension
  if (this.sv1.ScrollableHeight < 300)
  {
    Thickness thickness = this.sp1.Margin;
    thickness.Top += 50;
    this.sv1.SetValue(StackPanel.MarginProperty, thickness);
  }   
}


onScroll_Down()
{
  if (this.sv1.ScrollableHeight > 1)
  {
    Thickness thickness = this.sp1.Margin;
    thickness.Top += -50;
    this.sv1.SetValue(StackPanel.MarginProperty, thickness);
  }
}