2010-06-17 9 views

Respuesta

16

El ajuste ShowsNavigationUI = false en un objeto de página debe hacerlo. No parece ser un error, sin embargo, que va a causar que falle en al menos una secuencia de eventos:

  1. página ya está en NavigationWindow cuando este se establece
  2. página se navega de distancia y viceversa

Puede haber otros escenarios que aún no he encontrado que lo hagan fallar.

Para que esto funcione de manera totalmente confiable, lo que hago es ignorar por completo la propiedad Page.ShowsNavigationUI y configurarla en su lugar en NavigationWindow. Esto parece ser completamente confiable.

Aquí es cómo esto se puede hacer en su constructor Página:

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

Si hace esto, recuerde que no debe establecer ShowsNavigationUI en cualquier objeto de página.

FYI, también puede cambiar el estilo de su NavigationWindow como desee cambiando su ControlTemplate. Por ejemplo, esto elimina todo, pero el contenido de la página:

<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

no puedo encontrar ApplicationPriority. ¿En qué clase está? Tengo el mismo problema, pero para mí es aleatorio. – Paparazzi

+0

Cambie 'ApplicationPriority.Render' por 'DispatcherPriority.Loaded' –

3

Por encima sólo funciona para las ventanas de navegación, pero yo estoy usando ventanas ordinarias WPF. Algunos dicen que son mejores que las ventanas de navegación. Estoy usando DockPanel para alojar mis páginas. Mi solución crea una nueva plantilla para DockPanel y simplemente no agrega botones o los oculta (vea StackPanel Visibility = "Hidden"). Funciona bien

<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

¿Esto le permite cargar y cerrar páginas dinámicamente mientras mantiene abierta su página principal? –

5

Este me pareció muy fácil. En su MainWindow, hacer esto:

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

      ShowsNavigationUI = false; 
     } 
    } 
} 

Y si tienes un evento en el botón haga clic para abrir una nueva página, simplemente hacer esto:

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

+1 para mayor claridad. – jogojapan

7

Si estás utilizando un marcose puede cambiar el estilo predeterminado del Marco para eliminar los botones de navegación (que se muestran a continuación). El mismo enfoque podría hacerse para NavigationWindow. Intenté originalmente configurar Page.ShowsNavigationUI y no tuvo ningún efecto. Simplemente agregue el estilo de abajo a ResourceDictionary y funciona bien.

<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

simplemente dice que en su página de contenedores, que desea barra de navegación o no, usando propiedad NavigationUIVisibility.

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

0

he tenido este problema dinámicamente cada vez que cambia la propiedad contenido de un marco, y lo resolvió mediante el código siguiente en mi clic (evento).

ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden; 

Donde ContentFrame es el nombre del marco, como se define en XAML. es decir

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

Es muy fácil de implementar.

aquí:

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

:-p

Cuestiones relacionadas