1

我有一个带有 4 个 TabItems 的 TabControl。在每个 TabItem 内,我都有一个 GridView 和一个工具栏。我使用 MahApps.Metro(用于 Window 和 TabControl)和 telerik RadControls(用于 GridView 和 Toolbar)。我将 MahApps.Metro TabControl 与 AnimatedSingleRowTabControl 一起使用,因此每次切换选项卡时都会有一个选项卡更改动画。

GridView 为空时,动画流畅,但 GridView 填充数据时,则卡顿。每次我切换标签时,它总是滞后大约 1-2 秒。我的表最多只有 73 行。所以,我不认为加载太多。

我不知道这是因为我没有使用正确的方法将 GridView 与 Table 绑定还是其他原因。

我想平滑动画,所以我的解决方案是:

  • 切换选项卡时让 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 然后切换到另一个选项卡,它就会滞后。但是,当我切换回上一个选项卡时,它的动画效果很流畅。

4

1 回答 1

0

不要将 Gridview 放在 Tabcontrol 中,否则您必须使用“持久”TabControl

于 2016-03-28T04:07:02.367 回答