← 返回所有博客文章

在WPF平台下,C1FlexGrid控件在默认的情况下,拖动滚动条的时候,可视区域会同步滚动。然而,当gird表格包含大量的行,滚动会变得有点慢。

C1FlexGrid的默认行为是实时滚动,当拖动滚动条的时候,可以看到内容同步移动。然而,同步滚动需要消耗大量内存,这在有时就会感到卡顿的现象。在这种情况下,C1FlexGrid提供了一个属性deferred scrolling(延迟滚动)。延迟滚动是指另外一种滚动行为,当鼠标释放的时候才会滚动内容(这个和Outlook 2007收件箱类似)。

通过设置DeferScrolling可以实现C1FlexGrid的延迟滚动。它的枚举值如下所示:

1。None-不使用延迟滚动。

2。DeferVertical-竖直方向延迟滚动。

3。DeferHorizontal -水平方向延迟滚动。

4。DeferBoth -两个方向都延迟滚动。

 

如下是语法:

C#:

public DeferScrolling DeferScrolling { get; set; }

VB:

Public Property DeferScrolling As DeferScrolling
Get
Set

 

同时,当用户在延迟滚动模式拖拽滚动条,表格触发ScrollingDeferred事件。你可以在滚动延迟操作的时候使用这个获得反馈。

具体的可以参考附件的Sample。在C1FlexGrid上放置一个C1ComboBox作为选项。

如下是XAML代码:

<Grid Background=”AliceBlue”>
<grid.rowdefinitions>
<rowdefinition height="20" />
<rowdefinition height="Auto" />
<rowdefinition height="20" />
<rowdefinition height="Auto" />  
</grid.rowdefinitions>
  <stackpanel orientation="Horizontal" grid.row="1" />
  <textblock text="DeferScrolling : " padding="10,3,10,0" /> 
  <c1:c1combobox text="DeferBoth" width="150" iseditable="False" selecteditemchanged="C1ComboBox_SelectedItemChanged"/>
<c1:c1comboboxitem content="DeferBoth" istabstop="False" />
<c1:c1comboboxitem content="DeferHorizontal" istabstop="False" />
<c1:c1comboboxitem content="DeferVertical" istabstop="False" />
<c1:c1comboboxitem content="None" istabstop="False" /> 
</c1:c1combobox> 
</stackpanel>  
<c1:c1flexgrid height="380" grid.row="3" width="550" name="c1FlexGrid1" deferscrolling="DeferBoth" />
</grid>

 

C#代码如下:

 

// Change DeferScroll mode as per selection in ComboBox
private void C1ComboBox_SelectedItemChanged(object sender, C1.WPF.PropertyChangedEventArgs<object> e)
{
  var _flex = this.c1FlexGrid1;
  string _deferScroll;
  if (e.NewValue.GetType() == typeof(string))
  {
      _deferScroll = e.NewValue.ToString();
  }
  else
  {
     _deferScroll = (((System.Windows.Controls.ContentControl)
     (e.NewValue))).Content.ToString();
  }
  if (_flex != null)
  {
     switch (_deferScroll)
     {
        case "None":
        _flex.DeferScrolling = C1.WPF.FlexGrid.DeferScrolling.None;
        break;
        case "DeferBoth":
        _flex.DeferScrolling = C1.WPF.FlexGrid.DeferScrolling.DeferBoth;
        break;
        case "DeferHorizontal":
        _flex.DeferScrolling = C1.WPF.FlexGrid.DeferScrolling.DeferHorizontal;
        break;
        case "DeferVertical":
        _flex.DeferScrolling = C1.WPF.FlexGrid.DeferScrolling.DeferVertical;
        break;
     }
  }
}

运行效果如下所示,从ComboBox下拉框选择可以改变这个属性:

screenshot1

本文演示所用的Demo如下:

DeferredScrollingVB.zip (47.31 kb)

 

如果你对C1FlexGrid感兴趣,请到我们的官网下载最新版本:/developer/componentone-wpf

如果你有疑问,可以到GCDN论坛获得技术支持:http://gcdn.grapecity.com.cn/showforum-138.html