Comment cacher la barre de navigation dans une page WPF

je veux cacher la barre de navigation dans une page créée en utilisant WPF. J'ai essayé ShowsNavigationUI = false, mais il affiche toujours le contrôle.

29
demandé sur gung 2010-06-17 11:23:45

8 réponses

définir ShowsNavigationUI=false sur un objet de Page devrait le faire. Il semble y avoir un bug, cependant, qui causera un échec dans au moins une séquence d'événements:

  1. page est déjà dans NavigationWindow quand c'est
  2. la Page est accédée à l'écart et à l'arrière à nouveau

il y a peut-être d'autres scénarios que je n'ai pas encore rencontrés qui font qu'il échoue.

pour que cela fonctionne de manière totalement fiable, ce que je fais est d'ignorer le Page.ShowsNavigationUI propriété entièrement et le mettre à la place sur NavigationWindow. Cela semble être complètement fiable.

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

si vous faites cela, rappelez-vous de ne pas mettre ShowsNavigationUI sur n'importe quel objet de Page.

  <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>
17
répondu Ray Burns 2010-06-17 07:56:11

il suffit de dire dans votre conteneur de page, vous voulez barre de navigation ou non, en utilisant Propriété NavigationUIVisibility.

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

72
répondu SiwachGaurav 2013-01-04 11:32:44

c'est une implémentation très facile.

<Frame x:Name="_FrameName" NavigationUIVisibility="Hidden" />
24
répondu Moacir Kurmann 2018-07-24 00:14:06

si vous utilisez un Image vous pouvez changer le style par défaut du Cadre pour supprimer les boutons de navigation (ci-dessous). La même approche pourrait être faite pour NavigationWindow. J'ai d'abord essayé la mise en Page.ShowsNavigationUI et il n'a pas eu d'effet. Il suffit d'ajouter le style ci-dessous à une débrouillardise et il fonctionne très 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>
7
répondu Rana Ian 2012-09-08 05:48:48

celui-ci j'ai trouvé vraiment facile. Dans votre MainWindow, faire ceci:

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

            ShowsNavigationUI = false;
        }
    }
}

et si vous avez un événement sur le bouton Cliquez pour ouvrir une nouvelle page, faites juste ceci:

private void btnEndUserSearch_Click(object sender, RoutedEventArgs e)
{
            EndUser EndUserSearchPage = new EndUser();
            this.NavigationService.Navigate(EndUserSearchPage);
            EndUserSearchPage.ShowsNavigationUI = false;
}
5
répondu Preston 2011-11-11 06:27:27

ci-dessus fonctionne uniquement pour les fenêtres de Navigation, mais j'utilise des fenêtres WPF ordinaires. Certains disent qu'ils sont meilleurs que les fenêtres de Navigation. J'utilise DockPanel pour héberger mes pages. Ma solution crée un nouveau modèle pour le DockPanel et n'ajoute tout simplement pas de boutons ou les rend cachés (voir StackPanel Visibility="Hidden"). Il fonctionne très 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>
3
répondu Anton Andreev 2011-09-07 08:26:13

j'ai eu ce problème à chaque fois que j'ai dynamiquement changé la propriété de contenu d'un cadre, et je l'ai résolu en utilisant le code suivant dans mon événement click ().

ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;

où ContentFrame est le nom du cadre, tel que défini dans XAML. i.e.

<Frame x:Name="ContentFrame"  />
0
répondu XtraSimplicity 2014-11-16 02:49:47

Sur le NavigationWindow lui-même-je utiliser ShowsNavigationUI="False"

0
répondu Epirocks 2018-06-26 13:42:04