WPF UserControl - предварительная загрузка UserControl - PullRequest
0 голосов
/ 31 мая 2018

У меня есть MainWindow и 4 пользовательских элемента управления.Переключив DataContext на мои UserControls, я могу получить приложение с несколькими «страницами».В каждом UserControl у меня есть webBrowser-Control, который отображает PowerPoint (так -> 4 UC = 4 ppt).Проблема, с которой я столкнулся сейчас, заключается в том, что когда я переключаю свой DataContext (страница переключения), мне снова приходится загружать (вызывать метод навигации) весь 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>

// ...

<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: (когда я звоню в UC1 каждый раз, когда ppt открывается снова, я хочу просто открыть его один раз):

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

Надеюсь, я дал понять: S

1 Ответ

0 голосов
/ 31 мая 2018

В 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; Я надеюсь, что это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...