WPFを使用して作成されたページのナビゲーションバーを非表示にします。私が試してみました ShowsNavigationUI = false
が、まだコントロールを表示しています。
PageオブジェクトにShowsNavigationUI = falseを設定すると、そのようになります。ただし、少なくとも1つのイベントシーケンスでこれが失敗するバグがあるようです。
まだ実行していない他のシナリオで失敗する可能性があります。
これを完全に確実に動作させるには、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>
navigationUIVisibilityプロパティを使用して、ページコンテナにナビゲーションバーが必要かどうかを伝えるだけです。
<Frame Margin="173,41,1,28" Name="frmPageContainer" NavigationUIVisibility="Hidden" Panel.ZIndex="1" >
非常に簡単な実装です。
<Frame x:Name="_FrameName" NavigationUIVisibility="Hidden" />
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>
これは本当に簡単だと思いました。 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;
}
上記はナビゲーションウィンドウでのみ機能しますが、通常の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>
FrameのContentプロパティを動的に変更するたびにこの問題が発生し、click()イベントで次のコードを使用して解決しました。
ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;
ContentFrameは、XAMLで定義されているフレームの名前です。つまり.
<Frame x:Name="ContentFrame" />
NavigationWindow自体では、ShowsNavigationUI = "False"を使用します