Как скрыть панель навигации на странице WPF - PullRequest
36 голосов
/ 17 июня 2010

Я хочу скрыть панель навигации на странице, созданной с помощью WPF. Я попытался ShowsNavigationUI = false, но он все еще отображает элемент управления.

Ответы [ 8 ]

79 голосов
/ 04 января 2013

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

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

30 голосов
/ 20 января 2015

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

<Frame x:Name="_FrameName" NavigationUIVisibility="Hidden" />
20 голосов
/ 17 июня 2010

Установка ShowsNavigationUI = false на объекте Page должна сделать это.Однако, похоже, есть ошибка, которая приведет к сбою по крайней мере в одной последовательности событий:

  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 для любого объекта страницы.

К вашему сведению, вы также можете изменить свой стиль в 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>
7 голосов
/ 08 сентября 2012

Если вы используете Рамка , вы можете изменить стиль рамки по умолчанию, удалив кнопки навигации (показанные ниже).Тот же подход можно сделать для 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>
5 голосов
/ 11 ноября 2011

Этот мне показался действительно легким. В вашем главном окне сделайте это:

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;
}
3 голосов
/ 07 сентября 2011

Выше работает только для окон навигации, но я использую обычные окна 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 голосов
/ 26 июня 2018

В самом NavigationWindow я использую ShowsNavigationUI = "False"

0 голосов
/ 16 ноября 2014

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

ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;

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

<Frame x:Name="ContentFrame"  />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...