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