C# WPF UserControl-预加载UserControl
我有一个主窗口和4个用户控件。通过将DataContext切换到我的UserControls,我可以拥有一个具有多个“页面”的应用程序。在每个用户控件中,我都有一个显示PowerPoint的webBrowser控件(so->4 UC=4 ppt)。现在的问题是,当我切换DataContext(切换页面)时,我必须再次在webBrowser中加载(调用navigate方法)整个ppt,这需要一些时间。我怎样才能解决这个问题 提前感谢:)) 阿德里安 编辑代码 MainWindow.xamlC# WPF UserControl-预加载UserControl,c#,.net,wpf,powerpoint,C#,.net,Wpf,Powerpoint,我有一个主窗口和4个用户控件。通过将DataContext切换到我的UserControls,我可以拥有一个具有多个“页面”的应用程序。在每个用户控件中,我都有一个显示PowerPoint的webBrowser控件(so->4 UC=4 ppt)。现在的问题是,当我切换DataContext(切换页面)时,我必须再次在webBrowser中加载(调用navigate方法)整个ppt,这需要一些时间。我怎样才能解决这个问题 提前感谢:)) 阿德里安 编辑代码 MainWindow.xaml <
<Window.Resources>
<DataTemplate x:Name="Page1Template" DataType="{x:Type viewmodels:Page1Model}" >
<views:Page1 DataContext="{Binding}"/>
</DataTemplate>
<DataTemplate x:Name="Page2Template" DataType="{x:Type viewmodels:Page2Model}">
<views:Page2 DataContext="{Binding}"/>
</DataTemplate>
<DataTemplate x:Name="Page3Template" DataType="{x:Type viewmodels:Page3Model}">
<views:Page3 DataContext="{Binding}"/>
</DataTemplate>
<DataTemplate x:Name="Page4Template" DataType="{x:Type viewmodels:Page4Model}">
<views:Page4 DataContext="{Binding}"/>
</Window.Resources>
例如,我的UserControl1:(当我每次ppt再次打开时调用UC1时,我只想打开它一次):
我希望我说得很清楚:S在
主窗口中。xaml
将视图放置在堆栈面板中
以使可见
隐藏显示如下
<DataTemplate x:Name="Page1Template" DataType="{x:Type viewmodels:Page1Model}">
<StackPanel Visibility="{Binding Page1}">
<views:Page1 DataContext="{Binding}"/>
</StackPanel>
</DataTemplate>
private Visibility page1;
public Visibility Page1
{
get { return page1; }
set { page1 = value; }
}
然后在MainWindowLoad
函数中初始化每个视图的DataContext
,以便预加载。之后,您可以在每个菜单单击功能中设置每个视图的可见性,如下所示:
Page1=可见性。可见代码>或Page1=可见性。已折叠代码>
我希望它能起作用。您可以这样尝试,在页面加载时将所有用户控件作为默认值预加载,然后您可以根据您的权限设置可见性true
或false
。好的,谢谢,我该怎么做D.目前我正在使用一个内容控件,该控件在我的主窗口中显示Usercontrols(每个Usercontrols都有自己的ViewModel)。您能否共享引用代码,以便我可以为您提供一个提取解决方案。您可以通过编辑问题本身来发布代码。问题已编辑^^等一下,我会处理它。理论上这是可行的,但当我这样做时,DataContext=new Page1Model();DataContext=新的Page2Model();在我的窗口加载函数中,它只接受最新设置的DataContext,jsut显示第2页。我是否正确初始化了DataContext?为每个视图添加单独的加载,并参考相应的DataContext
,就像这样
页面加载的函数不会被触发,为什么?
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
powerPointBrowser1.Navigate("somePPTfile.pptx");
powerPointBrowser1.LoadCompleted += powerPointBrowser1_LoadCompleted;
}
<DataTemplate x:Name="Page1Template" DataType="{x:Type viewmodels:Page1Model}">
<StackPanel Visibility="{Binding Page1}">
<views:Page1 DataContext="{Binding}"/>
</StackPanel>
</DataTemplate>
private Visibility page1;
public Visibility Page1
{
get { return page1; }
set { page1 = value; }
}