Подтвердить что ты не робот

Как скрыть панель навигации на странице WPF

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Если вы это сделаете, не забудьте установить ShowsNavigationUI на любой объект страницы.

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>

Ответ 2

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

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

Ответ 3

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

Здесь:

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

: - р

Ответ 4

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

Этот я нашел очень легким. В своем 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;
}

Ответ 6

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

Ответ 7

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

ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;

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

<Frame x:Name="ContentFrame"  />