2012-11-14 42 views
1

我有一个TabControl 4 TabItems。在每个TabItem中,我有一个GridView和一个工具栏。 我使用MahApps.Metro(用于Window和TabControl)和telerik RadControls(用于GridView和Toolbar)。 我使用MahApps.Metro TabControl与AnimatedSingleRowTabControl,所以每次我切换选项卡有一个选项卡更改动画。MahApps.Metro TabControl Laggy与填充GridView

当GridView为空时,动画是平滑的,但是当GridView填充数据时,它是滞后的。 每次切换标签时,它总是滞后约1-2秒(s)。 我的表格只有最多73行。所以,我认为加载不会太多。

我不知道这是因为我没有使用正确的方式绑定GridView与表或其他原因。

我想平滑的动画,所以我的解决办法:

  • 让GridView的空切换时片和幻灯片动画后填充它。

  • 不知何故使动画平滑(改变绑定方式)。

但是,我不知道如何来完成上面的选项:P 任何人都可以帮我吗? 另一个解决方案是受欢迎的。

这是我的代码:

<TabControl SelectionChanged="TabControl_SelectionChanged"> 
     <TabItem Name="Tab_Collection" 
       Header="Collection" 
       Style="{StaticResource MetroTabItem}"> 
      <StackPanel Margin="20,10"> 
       <telerik:RadToolBar telerik:StyleManager.Theme="Metro" 
            Margin="0,0,0,5" 
            Width="338" 
            GripVisibility="Collapsed" 
            OverflowButtonVisibility="Collapsed" 
            HorizontalAlignment="Right"> 
        <Button Name="Btn_CollectionAdd" 
          Width="80" 
          Height="25" 
          Content="Add"/> 
        <Button Name="Btn_CollectionEdit" 
          Width="80" 
          Height="25" 
          Content="Edit"/> 
        <Button Name="Btn_CollectionDelete" 
          Width="80" 
          Height="25" 
          Content="Delete"/> 

        <telerik:RadToolBarSeparator/> 

        <Button Name="Btn_CollectionSearch" 
          Width="80" 
          Height="25" 
          Content="Search" 
          Click="Btn_Search_Click"/> 
       </telerik:RadToolBar> 

      <telerik:RadGridView Name="Dgv_Collection" telerik:StyleManager.Theme="Metro" 
            Margin="0,0,0,10" 
            Height="505" 
            BorderBrush="#25A0DA" 
            BorderThickness="1" 
            SelectionUnit="FullRow" 
            AutoGenerateColumns="False" 
            CanUserInsertRows="False" 
            CanUserDeleteRows="False" 
            CanUserResizeRows="False" 
            CanUserFreezeColumns="False" 
            CanUserSortColumns="False" 
            CanUserResizeColumns="False" 
            CanUserReorderColumns="False" 
            ShowGroupPanel="False" 
            RowIndicatorVisibility="Collapsed" 
            EditTriggers="None"> 
        <telerik:RadGridView.Columns> 
         <telerik:GridViewDataColumn Width="30" 
                Header="#" 
                IsFilterable="False" 
                DataMemberBinding="{Binding id}"/> 

         <telerik:GridViewDataColumn Width="*" 
                Header="Title" 
                IsFilterable="False" 
                DataMemberBinding="{Binding title}"/> 
        </telerik:RadGridView.Columns> 
       </telerik:RadGridView> 
      </StackPanel> 
     </TabItem> 

    //I do the same for the rest 3 TabItems 

    </TabControl> 

我绑定的GridView这样:

private void loadCollection() 
    { 
     String conn = connection_string; 
     String sql = null; 

     try 
     { 
      sql = "SELECT * FROM Tbl_Information"; 
      SqlCeDataAdapter dataAdapter = new SqlCeDataAdapter(sql, conn); 
      SqlCeCommandBuilder commandBuilder = new SqlCeCommandBuilder(dataAdapter); 

      DataTable table = new DataTable(); 
      dataAdapter.Fill(table); 
      Dgv_Collection.ItemsSource = table; 
     } 
     catch (SqlCeException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

    } 

    //load the rest 3 table the same way 

    public MainPage() 
    { 
     InitializeComponent(); 
     loadCollection(); 

     //call the rest 
    } 

注:我还是很新的WPF :)

编辑: 我发现它只是在第一次访问TabItem时才滞后。如果我点击一个TabItem然后切换到另一个Tab它滞后。但是,当我切换回前一个标签时,它的动画流畅。

回答

0

不要把Gridview放在Tabcontrol里面,或者你必须使用“持久”TabControl