【问题标题】:How to hide the navigation bar in a WPF page如何在 WPF 页面中隐藏导航栏
【发布时间】:2010-06-17 07:23:45
【问题描述】:

我想在使用 WPF 创建的页面中隐藏导航栏。我试过ShowsNavigationUI = false,但它仍然显示控件。

【问题讨论】:

    标签: wpf xaml uinavigationbar


    【解决方案1】:

    指定给页面Container,本意不带导航栏,使用 NavigationUIVisibility 属性。

    <Frame NavigationUIVisibility="Hidden" Panel.ZIndex="1" ... />
    

    【讨论】:

    • 简单明了。对我来说,这个问题的最佳答案。此外,如果您想始终查看页面导航系统而不是隐藏它。在这种情况下,NavigationUIVisibility="Visible" 可以解决问题。
    【解决方案2】:

    这是一个非常简单的实现。

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

    【讨论】:

      【解决方案3】:

      在Page 上设置ShowsNavigationUI=False 应该可以做到。但是,似乎确实存在一个错误,它会导致至少在一个事件序列中失败:

      1. 设置时页面已经在NavigationWindow中
      2. 页面被导航离开并再次返回

      可能还有其他我还没有遇到的情况导致它失败。

      为了让它完全可靠地工作,我所做的是完全忽略 Page.ShowsNavigationUI 属性并将其设置在 NavigationWindow 上。这似乎是完全可靠的。

      这是如何在您的 Page 构造函数中完成的:

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

      如果您这样做,请记住不要在任何 Page 对象上设置 ShowsNavigationUI。

      仅供参考,您还可以通过更改其 ControlTemplate 以任何您喜欢的方式重新设置 NavigationWindow 的样式。例如,这会删除除实际页面内容之外的所有内容:

        <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>
      

      【讨论】:

      • 我找不到 ApplicationPriority。它在哪个班级?我也有同样的问题,但对我来说这是随机的。
      • 通过“DispatcherPriority.Loaded”更改“ApplicationPriority.Render”
      • 下面的答案要简单得多,只需在框架元素上执行NavigationUIVisibility="Hidden"
      【解决方案4】:

      如果您使用的是 Frame,您可以更改 Frame 的默认样式以移除导航按钮(如下所示)。可以对 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】:

          最简单最简单的方法之一是添加: ShowsNavigationUI = false; 在 InitializeComponent() 下的 cs 文件构造函数中;

          【讨论】:

            【解决方案8】:

            对于初学者,您可以像这样简单地更改 MainWindow.xaml 中的代码。

                <Window>
                   <Grid >
                      <Frame x:Name="LeftFrame" NavigationUIVisibility="Hidden"/>
                      <Frame x:Name="RightFrame" NavigationUIVisibility="Hidden"/>
                   </Grid>
                </Window>
            

            【讨论】:

              【解决方案9】:

              每当我动态更改 Frame 的 Content 属性时,我都会遇到这个问题,并通过在 click() 事件中使用以下代码解决了这个问题。

              ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;
              

              其中 ContentFrame 是框架的名称,在 XAML 中定义。即

              <Frame x:Name="ContentFrame"  />
              

              【讨论】:

                【解决方案10】:

                在 NavigationWindow 本身我使用 ShowsNavigationUI="False"

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-03-31
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-04-26
                  • 1970-01-01
                  • 2017-09-11
                  相关资源
                  最近更新 更多