2015-10-30 3 views
0

В настоящее время у меня есть программа, в которой есть окно, содержащее два фрейма, один в верхней части экрана, аналогичный панели навигации, на которой пользователь может щелкнуть по различным кнопкам, чтобы перейти к областям программы, которые загружаются в рамку ниже.Навигация на другом кадре

Верхняя рамка постоянно остается неизменной, то есть есть кнопки, указывающие Questions, Tags и Users например, которые не меняются. Когда пользователь нажимает кнопку Questions, они должны быть доставлены в соответствующую область программы, но в пределах рамки ниже.

Проблема в том, что, поскольку они находятся в верхнем фрейме, NavigationService загружает соответствующую страницу в рамку вверху, а не в основную рамку в центре экрана.

Есть ли способ, которым кнопка нажата в пределах одного кадра, может привести к тому, что другой кадр загрузит другую страницу через NavigationService? Вот пример краски;

enter image description here

EDIT: Для того, чтобы обновить этот вопрос, что я изначально планировал делать это, чтобы иметь верхнюю раму, а не в кадре, но в window сам. Однако, поскольку window не наследует от page, я не мог использовать NavigationService.

ответ

0

Способ навигации в WPF с MVVM с управляемой моделью просмотра, вы можете узнать о различиях в управлении представлением и представлением модели, приведенной в slides of Bryan Anderson.

Затем вы можете переключить экземпляры свойств модели представления и позволить им визуализировать различные шаблоны данных. Хороший способ регистрации шаблонов данных из кода показан в этом codeproject article.

Таким образом, служба навигации изменит экземпляры модели представления, и это все, что он должен сделать. По мере изменения типа экземпляра другой шаблон данных обрабатывается для визуализации представления.

0

Если вы хотите загрузить соответствующую страницу в основную раму, вам необходимо использовать NavigationService основной рамы, и вы можете установить верхнюю рамку в window самостоятельно, без рамки. Например:

В вашем XAML

<Window x:Class="WPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WPF" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Title="MainWindow" Width="525" Height="350" mc:Ignorable="d"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="80" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Button x:Name="Questions" Margin="20" Click="Questions_Click">Questions</Button> 
      <Button x:Name="Tags" Grid.Column="1" Margin="20" Click="Tags_Click">Tags</Button> 
      <Button x:Name="Users" Grid.Column="2" Margin="20" Click="Users_Click">Users</Button> 
     </Grid> 
     <Frame x:Name="MainFrame" Grid.Row="1" /> 
    </Grid> 
</Window> 

А в коде-за

private void Questions_Click(object sender, RoutedEventArgs e) 
{ 
    //The relevant page you want to load 
    QuestionsPage questionsPage = new QuestionsPage(); 
    MainFrame.NavigationService.Navigate(questionsPage); 
    //Also you can use Frame.Navigate Method 
    //MainFrame.Navigate(questionsPage); 
} 
Смежные вопросы