Tabcontrol 中的 WPF 页面 TabItem 延迟加载
WPF Page Within Tabcontrol TabItem Lazy loading
我有 Xaml WPF window,里面有 TabControl
。它的每个 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>
问题是当我打开这个 window 框架内的所有页面时同时加载,所以如果,例如,我在每个页面加载上放置 MessageBox
我会得到很多。我希望我的页面仅在我单击相应的选项卡 header 时加载。
我怎样才能做到这一点?
一个可能的解决方案是像这样从 TabItem
继承:
public class MyCustomTabItem : TabItem
{
public void MyCustomInitFunction()
{
//Do all your stuff here
}
}
在其中放置您点击控件时应该发生的所有内容。
使用这些新项目创建您的 TabControl
:
<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>
连接 SelectionChanged
事件处理程序以调用您的特殊初始化函数:
private void myTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
TabControl tc = (TabControl)e.Source;
if(tc != null)
{
MyCustomTabItem ti = (MyCustomTabItem)tc.Items[tc.SelectedIndex];
if(ti != null)
{
ti.MyCustomInitFunction()
}
}
}
如果您只希望在第一次显示时发生这种情况,请在您的 MyCustomTabItem
class 中放置一个 bool
变量来跟踪它是否已经发生过一次,如果所以只是 return 而不是 运行 再一次。
我有 Xaml WPF window,里面有 TabControl
。它的每个 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>
问题是当我打开这个 window 框架内的所有页面时同时加载,所以如果,例如,我在每个页面加载上放置 MessageBox
我会得到很多。我希望我的页面仅在我单击相应的选项卡 header 时加载。
我怎样才能做到这一点?
一个可能的解决方案是像这样从 TabItem
继承:
public class MyCustomTabItem : TabItem
{
public void MyCustomInitFunction()
{
//Do all your stuff here
}
}
在其中放置您点击控件时应该发生的所有内容。
使用这些新项目创建您的 TabControl
:
<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>
连接 SelectionChanged
事件处理程序以调用您的特殊初始化函数:
private void myTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
TabControl tc = (TabControl)e.Source;
if(tc != null)
{
MyCustomTabItem ti = (MyCustomTabItem)tc.Items[tc.SelectedIndex];
if(ti != null)
{
ti.MyCustomInitFunction()
}
}
}
如果您只希望在第一次显示时发生这种情况,请在您的 MyCustomTabItem
class 中放置一个 bool
变量来跟踪它是否已经发生过一次,如果所以只是 return 而不是 运行 再一次。