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 をクリックしてから別のタブに切り替えると、ラグが発生します。しかし、前のタブに戻ると、スムーズにアニメーション化されます。