如何隐藏WPF页面中的导航栏

时间:2010-06-17 07:23:46

标签: wpf xaml uinavigationbar

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

10 个答案:

答案 0 :(得分:78)

告诉你的页面容器,你想要或不使用导航栏 NavigationUIVisibility属性。

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

答案 1 :(得分:30)

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

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

答案 2 :(得分:19)

在Page对象上设置ShowsNavigationUI = false应该这样做。但是,确实存在一个错误,它会导致至少在一系列事件中失败:

    设置时,
  1. 页面已在NavigationWindow中
  2. 页面被导航并再次返回
  3. 可能还有其他一些我尚未遇到的情况会让它失败。

    为了让它完全可靠地工作,我所做的是完全忽略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>
    

答案 3 :(得分:7)

如果您使用的是 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>

答案 4 :(得分: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;
}

答案 5 :(得分:3)

以上仅适用于导航窗口,但我使用的是普通的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>

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;

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

<Frame x:Name="ContentFrame"  />

答案 8 :(得分:0)

在NavigationWindow本身上,我使用ShowsNavigationUI =“ False”

答案 9 :(得分:0)

对于初学者来说,您可以像这样在MainWindow.xaml上简单地更改代码。

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