WPF UserControl-预加载UserControl

时间:2018-05-31 07:07:40

标签: c# .net wpf powerpoint

我有一个MainWindow和4个UserControls。通过将DataContext切换到我的UserControls,我可以拥有一个包含多个“Pages”的应用程序。在每个UserControl中,我都有一个显示PowerPoint的webBrowser-Control(所以 - > 4 UC = 4 ppt)。我现在的问题是,当我切换我的DataContext(切换页面)时,我必须再次加载(调用导航方法)整个ppt在我的webBrowser中并且需要一些时间。我该如何解决这个问题?

提前感谢:))

阿德里安

编辑代码

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>

// ...

<ContentControl Content="{Binding}"></ContentControl>

MainWindow.xaml.cs(我称之为Switch这样的页面)

 private void menuBtn1_Click(object sender, RoutedEventArgs e)
 {   
    DataContext = new Page1Model();   
 }
 private void menuBtn2_Click(object sender, RoutedEventArgs e)
 {
    DataContext = new Page2Model();
 }
 private void menuBtn3_Click(object sender, RoutedEventArgs e)
 {
    DataContext = new Page3Model();
 }
 private void menuBtn4_Click(object sender, RoutedEventArgs e)
 {
    DataContext = new Page4Model();
 }

并且比如说我的UserControl1 :(每当ppt再次打开时我调用UC1,我只想打开它一次):

private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        powerPointBrowser1.Navigate("somePPTfile.pptx");
        powerPointBrowser1.LoadCompleted += powerPointBrowser1_LoadCompleted;
    }

我希望我说清楚:S

1 个答案:

答案 0 :(得分:0)

Mainwindow.xaml中将视图放在stackpanel中,使visiblity隐藏显示如下。

<DataTemplate x:Name="Page1Template" DataType="{x:Type viewmodels:Page1Model}">
 <StackPanel Visibility="{Binding Page1}">
  <views:Page1 DataContext="{Binding}"/>
 </StackPanel>
</DataTemplate>

MainWindow.xaml.cs中,你必须像这样设置一个可见性属性。

private Visibility page1;
public Visibility Page1
{
    get { return page1; }
    set { page1 = value; }
}

然后初始化DataContext函数中每个视图的MainWindowLoad,以便预先加载它。之后,您可以在每个菜单点击功能中设置每个视图的可见性,如下所示: Page1 = Visibility.Visible;Page1 = Visibility.Collapsed; 我希望它会奏效。

相关问题