Je souhaite masquer la barre de navigation dans une page créée à l'aide de WPF. J'ai essayé ShowsNavigationUI = false
, mais il affiche toujours le contrôle.
Définir ShowsNavigationUI = false sur un objet de page doit le faire. Il semble y avoir un bogue, cependant, qui entraînera un échec dans au moins une séquence d'événements:
Il y a peut-être d'autres scénarios que je n'ai pas encore rencontrés et qui échouent.
Pour que cela fonctionne de manière totalement fiable, ce que je fais est d'ignorer complètement la propriété Page.ShowsNavigationUI et de la définir à la place sur NavigationWindow. Cela semble être complètement fiable.
Voici comment cela peut être fait dans votre constructeur de page:
Dispatcher.BeginInvoke(ApplicationPriority.Render, new Action(() =>
{
var navWindow = Window.GetWindow(this) as NavigationWindow;
if(navWindow!=null) navWindow.ShowsNavigationUI = false;
}));
Dans ce cas, n'oubliez pas de ne pas définir ShowsNavigationUI sur un objet de page.
Pour votre information, vous pouvez également modifier le style de votre NavigationWindow en modifiant son ControlTemplate. Par exemple, cela supprime tout sauf le contenu de la page:
<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>
indiquez simplement dans le conteneur de votre page que vous voulez une barre de navigation ou non, en utilisant la propriété NavigationUIVisibility.
<Frame Margin="173,41,1,28" Name="frmPageContainer" NavigationUIVisibility="Hidden" Panel.ZIndex="1" >
C'est une implémentation très facile.
<Frame x:Name="_FrameName" NavigationUIVisibility="Hidden" />
Si vous utilisez un Cadre, vous pouvez modifier le style par défaut du Cadre pour supprimer les boutons de navigation (voir ci-dessous). La même approche pourrait être faite pour NavigationWindow. J'ai initialement essayé de définir Page.ShowsNavigationUI et cela n'a eu aucun effet. Il suffit d’ajouter le style ci-dessous à un ResourceDictionary et cela fonctionne correctement.
<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>
Celui-ci je l'ai trouvé vraiment facile. Dans votre fenêtre principale, procédez comme suit:
public MainWindow()
public partial class MainWindow : NavigationWindow
{
public MainWindow()
{
InitializeComponent();
ShowsNavigationUI = false;
}
}
}
Et si vous avez un événement sur le bouton, cliquez pour ouvrir une nouvelle page, procédez comme suit:
private void btnEndUserSearch_Click(object sender, RoutedEventArgs e)
{
EndUser EndUserSearchPage = new EndUser();
this.NavigationService.Navigate(EndUserSearchPage);
EndUserSearchPage.ShowsNavigationUI = false;
}
Ci-dessus ne fonctionne que pour les fenêtres de navigation, mais j'utilise des fenêtres WPF ordinaires. Certains disent que ce sont mieux que les fenêtres de navigation. J'utilise DockPanel pour héberger mes pages. Ma solution crée un nouveau modèle pour le DockPanel et n'ajoute ni ne place de boutons, ni les masque (voir StackPanel Visibility = "Caché"). Ça marche bien.
<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>
J'ai eu ce problème chaque fois que j'ai dynamiquement changé la propriété Content d'un cadre et que je l'ai résolu en utilisant le code suivant dans mon événement click ().
ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;
Où ContentFrame est le nom du cadre, tel que défini en XAML. c'est à dire.
<Frame x:Name="ContentFrame" />
Sur la fenêtre de navigation même, j'utilise ShowsNavigationUI = "False"