web-dev-qa-db-ja.com

WPFページでナビゲーションバーを非表示にする方法

WPFを使用して作成されたページのナビゲーションバーを非表示にします。私が試してみました ShowsNavigationUI = falseが、まだコントロールを表示しています。

36
Geeth

PageオブジェクトにShowsNavigationUI = falseを設定すると、そのようになります。ただし、少なくとも1つのイベントシーケンスでこれが失敗するバグがあるようです。

  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>
20
Ray Burns

navigationUIVisibilityプロパティを使用して、ページコンテナにナビゲーションバーが必要かどうかを伝えるだけです。

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

非常に簡単な実装です。

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

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

これは本当に簡単だと思いました。 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
Preston

上記はナビゲーションウィンドウでのみ機能しますが、通常の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>
3
Anton Andreev

FrameのContentプロパティを動的に変更するたびにこの問題が発生し、click()イベントで次のコードを使用して解決しました。

ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;

ContentFrameは、XAMLで定義されているフレームの名前です。つまり.

<Frame x:Name="ContentFrame"  />
0
XtraSimplicity

NavigationWindow自体では、ShowsNavigationUI = "False"を使用します

0
Epirocks