C# Tabcontrol TabItem惰性加载中的WPF页面
我有一个内部带有C# Tabcontrol TabItem惰性加载中的WPF页面,c#,wpf,lazy-loading,tabcontrol,C#,Wpf,Lazy Loading,Tabcontrol,我有一个内部带有TabControl的Xaml WPF窗口。它的每个TabItem在框架内包含一个页面,如下所示: <TabItem > <TabItem.Header> Users </TabItem.Header> <Frame Source="/Views/UsersPage.xaml" /> </TabItem> &l
TabControl
的Xaml WPF窗口。它的每个TabItem
在框架内包含一个页面,如下所示:
<TabItem >
<TabItem.Header>
Users
</TabItem.Header>
<Frame Source="/Views/UsersPage.xaml" />
</TabItem>
<TabItem>
<TabItem.Header>
Stats
</TabItem.Header>
<Frame Source="/Views/OrdersPage.xaml"/>
</TabItem>
public class MyCustomTabItem : TabItem
{
public void MyCustomInitFunction()
{
//Do all your stuff here
}
}
使用者
统计数据
问题是,当我打开这个窗口时,框架内的所有页面都同时加载,因此,如果我在每个页面加载上放置MessageBox
,我会得到很多页面。我只希望在单击相应的选项卡标题时加载页面。
如何实现这一点?一种可能的解决方案是从
TabItem
继承如下内容:
<TabItem >
<TabItem.Header>
Users
</TabItem.Header>
<Frame Source="/Views/UsersPage.xaml" />
</TabItem>
<TabItem>
<TabItem.Header>
Stats
</TabItem.Header>
<Frame Source="/Views/OrdersPage.xaml"/>
</TabItem>
public class MyCustomTabItem : TabItem
{
public void MyCustomInitFunction()
{
//Do all your stuff here
}
}
在那里放上你所有的东西,当控件被点击的时候,这些东西应该会发生
使用这些新项目创建选项卡控件
:
<TabControl SelectionChanged="myTabControl_SelectionChanged" Name="myTabControl">
<MyCustomTabItem Name="myTab1">
<MyCustomTabItem.Header>
Users
</MyCustomTabItem.Header>
<Frame Source="/Views/UsersPage.xaml" />
</MyCustomTabItem>
<MyCustomTabItem Name="myTab2">
<MyCustomTabItem.Header>
Stats
</MyCustomTabItem.Header>
<Frame Source="/Views/OrdersPage.xaml"/>
</MyCustomTabItem>
</TabControl>
如果您只希望在第一次显示时发生此情况,请在
MyCustomTabItem
类中放置一个bool
变量,该变量用于跟踪是否已经发生过一次,如果是这样,只需返回,而不是再次运行它。将您的Frame.Source
或MessageBox
赋值放入一个自定义init函数中,并调用所选选项卡控件
中相应的选项卡项
中的SelectionChanged
。您正在寻找延迟加载,它将按需加载当前选项卡,而不是一次加载所有选项卡