Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Tabcontrol TabItem惰性加载中的WPF页面_C#_Wpf_Lazy Loading_Tabcontrol - Fatal编程技术网

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
。您正在寻找延迟加载,它将按需加载当前选项卡,而不是一次加载所有选项卡