0

Я хочу использовать макет ящика в своем приложении для гамбургера, но так как мое приложение содержит более 30 страниц, на которых шаблон ящика, объявленный на каждой странице, невозможен поэтому я хотел, чтобы макет лотка был главной страницей с дочерней/контентной страницей внутри, для которой я написал код ниже с тегом фрейма, чтобы перейти на страницу с щелчком меню в макете ящика.Проблема с кадровой навигацией на кнопке «Назад» в макете ящика Windows Phone 8.1 (Universal) WinRT

Ниже моя XAML

<Grid x:Name="Rootlayout"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <!-- title bar--> 
    <Grid x:Name="TitleBar" Height="50" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Background="SkyBlue"> 
     <Image Source="/Assets/fs-logo.png" Height="50" HorizontalAlignment="Left" Margin="10,0,0,0"/> 
    </Grid> 
    <!--Drawer Layout--> 
    <drawer:DrawerLayout x:Name="DrawerLayout" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"> 
     <Grid> 
      <Frame x:Name="contentFrame" /> 
     </Grid> 
     <Grid x:Name="listFragment" FlowDirection="LeftToRight" > 
      <ListView x:Name="listItem" SelectionChanged="listItem_SelectionChanged"> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding}" FontSize="20" Foreground="Black" Margin="10" VerticalAlignment="Center" HorizontalAlignment="Left"/>  
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
     </Grid> 
    </drawer:DrawerLayout> 
</Grid> 

While поведение точно как I хочу но существует неполадки аппаратного back кнопки, как когда она нажата приложение gets выход. Даже у меня есть ручка кнопки назад пресс-конференции, используя следующий код App.xaml.cs

//Below code of line in app constructor & it's method defination 
#if WINDOWS_PHONE_APP 
HardwareButtons.BackPressed += HardwareButtons_BackPressed; 
#endif 

#if WINDOWS_PHONE_APP  
void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) 
{ 
    Frame rootFrame = Window.Current.Content as Frame; 
    if (frame != null && frame.CanGoBack) 
     { 
      frame.GoBack(); 
      e.Handled = true; 
     } 
} 
#endif 

Может кто-нибудь помочь мне, как решить эту проблему кнопки назад или есть другой способ, я могу использовать макет ящика, с помощью которого я не нужно писать код xaml макета ящика на каждой странице. Один из способов заключается в использовании usercontrol, но поскольку сетка содержимого является частью drawerlayout, я не могу понять, как подключить мой usercontrol & к моей обычной странице xaml. Пожалуйста, помогите thanx заранее

ответ

0

Вы проверяете CanGoBack на неправильном фрейме.

Window.Current.Content - это базовая рамка, содержащая DrawerLayout. То, что вы на самом деле хотите решить, это contentFrame внутри него.

Так что вы действительно хотите, чтобы смотреть на это:

(Window.Current.Content as RootPage)?.Frame.CanGoBack 

Где RootPage это название вашей страницы для Xaml вы публикуемую в вашем вопросе.

+0

Thanx Я попробую то же самое. Также хотелось бы знать, что правильный подход к использованию drawerlayout или сделать пользовательский контроль drawerlayout более предпочтительным, и если да, то как я могу сделать то же самое. –

+0

Выглядит хорошо. Зависит от вашего проекта и требований. –

+0

Это не работает, поскольку страница не имеет CanGoBack & GoBack() –