Jak ukryć pasek nawigacji na stronie WPF

Chcę ukryć pasek nawigacji na stronie utworzonej przy użyciu WPF. Próbowałem ShowsNavigationUI = false, ale nadal wyświetla kontrolkę.

Author: gung, 2010-06-17

8 answers

Ustawienie ShowsNavigationUI = false na obiekcie Page powinno to zrobić. Wydaje się jednak, że istnieje błąd, który spowoduje, że to się nie powiedzie w co najmniej jednej sekwencji zdarzeń:

  1. strona jest już w NavigationWindow, gdy jest ustawiona
  2. strona jest nawigowana z powrotem i z powrotem
Mogą być inne scenariusze, na które jeszcze nie wpadłem, które sprawiają, że się nie uda.

Aby to działało całkowicie niezawodnie, to co robię, to ignoruję stronę.ShowsNavigationUI nieruchomości w całości i ustaw go zamiast na oknie nawigacyjnym. To wydaje się być całkowicie wiarygodne.

Oto jak można to zrobić w konstruktorze stron:

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

Jeśli to zrobisz, pamiętaj, aby nie ustawiać ShowsNavigationUI na żadnym obiekcie Page.

Dla twojej wiadomości, możesz również zmienić swoje okno nawigacyjne w dowolny sposób, zmieniając jego ControlTemplate. Na przykład usuwa wszystko poza rzeczywistą zawartością strony:

  <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
Author: Ray Burns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-17 07:56:11

Po prostu powiedz w kontenerze strony, chcesz pasek nawigacji lub nie, za pomocą NavigationUIVisibility property.

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

 72
Author: SiwachGaurav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-04 11:32:44

To bardzo łatwa implementacja.

<Frame x:Name="_FrameName" NavigationUIVisibility="Hidden" />
 24
Author: Moacir Kurmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 00:14:06

Jeśli używasz ramki możesz zmienić domyślny styl ramki, aby usunąć przyciski nawigacyjne (pokazane poniżej). To samo podejście można zrobić dla NavigationWindow. Początkowo próbowałem ustawić stronę.ShowsNavigationUI i to nie miało żadnego efektu. Wystarczy dodać poniższy styl do ResourceDictionary i działa dobrze.

<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
Author: Rana Ian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-08 05:48:48

Ten znalazłem bardzo łatwo. W oknie głównym zrób to:

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

            ShowsNavigationUI = false;
        }
    }
}

A jeśli masz wydarzenie na przycisku Kliknij, aby otworzyć nową stronę, po prostu zrób to:

private void btnEndUserSearch_Click(object sender, RoutedEventArgs e)
{
            EndUser EndUserSearchPage = new EndUser();
            this.NavigationService.Navigate(EndUserSearchPage);
            EndUserSearchPage.ShowsNavigationUI = false;
}
 5
Author: Preston,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-11 06:27:27

Powyżej działa tylko dla okien nawigacyjnych, ale używam zwykłych okien WPF. Niektórzy twierdzą, że są lepsze niż OKNA nawigacyjne. Używam DockPanel do hostowania moich stron. Moje rozwiązanie tworzy nowy szablon dla DockPanel i po prostu nie dodaje przycisków ani nie powoduje ich ukrycia (zobacz StackPanel Visibility="Hidden"). Działa ładnie.

<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
Author: Anton Andreev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-07 08:26:13

Miałem ten problem za każdym razem, gdy dynamicznie zmieniałem właściwość zawartości ramki i rozwiązywałem go za pomocą następującego kodu w moim zdarzeniu click ().

ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;

Gdzie ContentFrame jest nazwą ramki zdefiniowanej w XAML. tj.

<Frame x:Name="ContentFrame"  />
 0
Author: XtraSimplicity,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-16 02:49:47

W samej nawigacji używam ShowsNavigationUI= "False"

 0
Author: Epirocks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-26 13:42:04