我有一个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
答案 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;
我希望它会奏效。