我想在使用WPF创建的页面中隐藏导航栏。我尝试了ShowsNavigationUI = false
,但仍然显示控件。
答案 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应该这样做。但是,确实存在一个错误,它会导致至少在一系列事件中失败:
可能还有其他一些我尚未遇到的情况会让它失败。
为了让它完全可靠地工作,我所做的是完全忽略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>