1

4 つの TabItems を持つ TabControl があります。各 TabItem 内には、GridView とツールバーがあります。私は MahApps.Metro (ウィンドウと TabControl 用) と telerik RadControls (GridView とツールバー用) を使用します。私は AnimatedSingleRowTabControl で MahApps.Metro TabControl を使用しているので、タブを切り替えるたびにアニメーションが変更されます。

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 に答える