2010-06-17 4 views

ответ

16

Настройка ShowsNavigationUI = false на объекте страницы должен делать это. Там, кажется, ошибка, однако, что приведет это к сбою, по меньшей мере, одной последовательности событий:

  1. Страница уже в NavigationWindow, когда это установлено
  2. Страница будет перемещаться в сторону и снова

Могут быть другие сценарии, с которыми я еще не столкнулся, но это не позволяет.

Для того, чтобы это полностью работало, я полностью игнорирую свойство Page.ShowsNavigationUI и устанавливаю его в NavigationWindow. Это кажется полностью надежным.

Вот как это можно сделать в конструкторе страницы:

Dispatcher.BeginInvoke(ApplicationPriority.Render, new Action(() => 
{ 
    var navWindow = Window.GetWindow(this) as NavigationWindow; 
    if(navWindow!=null) navWindow.ShowsNavigationUI = false; 
})); 

Если вы сделаете это, не помню, чтобы установить ShowsNavigationUI на любом объекте Page.

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

<Style TargetType="{x:Type NavigationWindow}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type NavigationWindow}"> 

      <AdornerDecorator> 
      <ContentPresenter Name="PART_NavWinCP" 
           ClipToBounds="true"/> 
      </AdornerDecorator> 

     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    </Style> 
+0

Я не могу найти ApplicationPriority. В каком классе это? У меня есть эта же проблема, но для меня это случайная. – Paparazzi

+0

Изменить «ApplicationPriority.Render» на «DispatcherPriority.Loaded» –

3

Выше работает только для навигационных окон, но я использую обычные окна WPF. Некоторые говорят, что это лучше, чем окна навигации. Я использую DockPanel для размещения моих страниц. Мое решение создает новый шаблон для DockPanel и просто не добавляет кнопки или не скрывает их (см. StackPanel Visibility = «Hidden»). Он работает красиво.

<DockPanel>  
    <Frame x:Name="_mainFrame"> 
    <Frame.Template> 

     <ControlTemplate TargetType="Frame"> 
      <DockPanel Margin="7"> 
       <StackPanel Visibility="Hidden" 
        Margin="0" 
        Orientation="Horizontal" 
        DockPanel.Dock="Top" 
        > 
        <!--<Button 
         Content="Avast! Go back!" 
         Command="{x:Static NavigationCommands.BrowseBack}" 
         IsEnabled="{TemplateBinding CanGoBack}" 
         /> 
        <Button 
         Content="Forward you dogs!" 
         Command="{x:Static NavigationCommands.BrowseForward}" 
         IsEnabled="{TemplateBinding CanGoForward}" 
         />--> 
       </StackPanel> 

       <Border> 
        <ContentPresenter /> 
       </Border> 
      </DockPanel> 
     </ControlTemplate> 

     </Frame.Template> 
    </Frame> 
</DockPanel> 
+0

позволяет вам динамически загружать и закрывать страницы, сохраняя при этом свою главную страницу? –

5

Этого я нашел очень просто. В вашей MainWindow, сделайте следующее:

public MainWindow() 
    public partial class MainWindow : NavigationWindow 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      ShowsNavigationUI = false; 
     } 
    } 
} 

И если у вас есть событие на кнопку мыши, чтобы открыть новую страницу, просто сделать это:

private void btnEndUserSearch_Click(object sender, RoutedEventArgs e) 
{ 
      EndUser EndUserSearchPage = new EndUser(); 
      this.NavigationService.Navigate(EndUserSearchPage); 
      EndUserSearchPage.ShowsNavigationUI = false; 
} 
+0

+1 для наглядности. – jogojapan

7

Если вы используете рамку вы может изменить стиль по умолчанию для Frame, чтобы удалить навигационные кнопки (показано ниже). Такой же подход можно было бы сделать для NavigationWindow. Я изначально попытался установить Page_ShowsNavigationUI, и это не повлияло. Просто добавьте стиль ниже в ResourceDictionary, и он отлично работает.

<Style TargetType="{x:Type Frame}"> 
    <Setter Property="Control.Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Frame}"> 
     <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="{TemplateBinding Control.Padding}" BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}"> 
      <ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" Name="PART_FrameCP" /> 
     </Border> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
68

просто скажите на странице контейнере, вы хотите панель навигации или нет, используя NavigationUIVisibility свойства.

<Frame Margin="173,41,1,28" Name="frmPageContainer" NavigationUIVisibility="Hidden" Panel.ZIndex="1" > 

0

У меня была эта проблема, когда я динамически изменяемые содержимого свойство Frame, и решить ее, используя следующий код в моем клик() событие.

ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden; 

Где ContentFrame - это имя фрейма, как определено в XAML. то есть

<Frame x:Name="ContentFrame" /> 
22

Это очень простая реализация.

Здесь:

<Frame x:Name="_FrameName" NavigationUIVisibility="Hidden" /> 

:-p

Смежные вопросы