Ich möchte die Navigationsleiste in einer mit WPF erstellten Seite ausblenden. Ich habe versucht ShowsNavigationUI = false
, aber es zeigt immer noch das Steuerelement.So blenden Sie die Navigationsleiste in einer WPF-Seite aus
Antwort
Einstellung ShowsNavigationUI = false auf einem Page-Objekt sollte es tun. Es scheint ein Fehler zu sein, aber, dass dies in mindestens einer Folge von Ereignissen scheitern verursacht:
- Seite ist bereits in Navigation Einstellung, wenn
- Seite navigiert weg und wieder zurück
Es kann andere Szenarien geben, in denen ich noch nicht gelandet bin, die es scheitern lassen.
Damit dies absolut zuverlässig funktioniert, ignoriere ich die Page.ShowsNavigationUI -Eigenschaft vollständig und setze sie stattdessen auf NavigationWindow. Dies scheint absolut zuverlässig zu sein.
Hier ist, wie dies in Ihrer Seite Konstruktor erfolgen:
Dispatcher.BeginInvoke(ApplicationPriority.Render, new Action(() =>
{
var navWindow = Window.GetWindow(this) as NavigationWindow;
if(navWindow!=null) navWindow.ShowsNavigationUI = false;
}));
Wenn Sie dies tun, denken Sie daran nicht ShowsNavigationUI auf jeder Seite Objekt einzustellen.
Zu Ihrer Information, Sie können Ihr Navigationsfenster auch anders gestalten, indem Sie das ControlTemplate ändern. Zum Beispiel entfernt das alles außer dem eigentlichen Seiteninhalt:
<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>
Oben funktioniert nur für Navigationsfenster, aber ich benutze gewöhnliche WPF-Fenster. Einige sagen, diese sind besser als Navigationsfenster. Ich verwende DockPanel, um meine Seiten zu hosten. Meine Lösung erstellt eine neue Vorlage für das DockPanel und fügt einfach keine Schaltflächen hinzu oder macht sie unsichtbar (siehe StackPanel Visibility = "Versteckt"). Es funktioniert gut.
<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>
ermöglicht dies Ihnen, Seiten dynamisch zu laden und zu schließen, während Ihre Hauptseite geöffnet bleibt? –
Diese fand ich wirklich einfach. In Ihrem Mainwindow, dies zu tun:
public MainWindow()
public partial class MainWindow : NavigationWindow
{
public MainWindow()
{
InitializeComponent();
ShowsNavigationUI = false;
}
}
}
Und wenn Sie ein Ereignis auf die Schaltfläche haben, um eine neue Seite zu öffnen, tun gerade dies:
private void btnEndUserSearch_Click(object sender, RoutedEventArgs e)
{
EndUser EndUserSearchPage = new EndUser();
this.NavigationService.Navigate(EndUserSearchPage);
EndUserSearchPage.ShowsNavigationUI = false;
}
+1 für Klarheit. – jogojapan
Wenn Sie einen Rahmen verwenden Sie kann den Standard-Stil des Rahmens ändern, um die Navigationsschaltflächen zu entfernen (siehe unten). Der gleiche Ansatz könnte für NavigationWindow durchgeführt werden. Ich habe ursprünglich versucht, PageShowsNavigationUI zu setzen, und es hatte keine Wirkung. Fügen Sie einfach den folgenden Stil zu einem ResourceDictionary hinzu und es funktioniert gut.
<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>
nur in Ihre Seite Container sagen, Sie Navigationsleiste wollen oder nicht, NavigationUIVisibility Eigenschaft.
<Frame Margin="173,41,1,28" Name="frmPageContainer" NavigationUIVisibility="Hidden" Panel.ZIndex="1" >
Ich hatte dieses Problem, wenn ich dynamisch die Content-Eigenschaft eines Rahmens geändert, und löste es, indem Sie den folgenden Code in meinem Klick() Ereignis verwendet wird.
ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;
Dabei ist ContentFrame der Name des Frames, wie in XAML definiert. d.h.
<Frame x:Name="ContentFrame" />
Es ist eine sehr einfache Implementierung.
hier:
<Frame x:Name="_FrameName" NavigationUIVisibility="Hidden" />
:-P
- 1. So blenden Sie eine Navigationsleiste aus?
- 2. So blenden Sie den UIBARButton-Eintrag einer Navigationsleiste aus
- 3. So blenden Sie die Stapelausgabe aus
- 4. So blenden Sie die Navigationsleiste zurück Schaltflächentitel von AppDelegate
- 5. So blenden Sie die Statusleiste aus?
- 6. So blenden Sie das Dock-Symbol aus
- 7. So blenden Sie die Bildlaufleiste von UICollectionView
- 8. So blenden Sie inputAccessoryView aus, ohne die Tastatur zu verwerfen
- 9. So blenden Sie PHP aus, wenn die Datenbank leer ist
- 10. So blenden Sie die WebView-Fehlerseite aus. Ist es möglich?
- 11. So blenden Sie die Titelleiste im iPhone-Hauptfenster aus
- 12. So blenden Sie Flash-Einbettungen aus, ohne sie zu deaktivieren
- 13. So blenden Sie eine Spalte in yii
- 14. So blenden Sie die Datenpunktbeschriftung aus, wenn in einer StackedBar der Wert 0 ist.
- 15. So blenden Sie Elemente im gefilterten Blatt aus
- 16. So verstecken Sie die Navigationsleiste in Firefox
- 17. So blenden Sie gepunktete Linien in QTreeWidget
- 18. So blenden Sie Akkordeons beim Laden von Seiten aus?
- 19. So blenden Sie Tabellen mit Optionsfeldern ein und aus?
- 20. So blenden Sie den Inhalt eines Filters mit CSS aus
- 21. So verschieben Sie die Navigationsleiste richtig
- 22. So blenden Sie SQLite DB-Dateien aus, so dass sie nicht in iTunes freigegeben sind
- 23. So blenden Sie die Aktualisierungsschaltfläche im Report Viewer-Steuerelement (ASP.NET)
- 24. So machen Sie die Navigationsleiste transparent
- 25. So blenden Sie die Dekodierung der Ergebnismenge in der Psql-Ausgabe aus
- 26. So zentrieren Sie die Navigationsleiste mit CSS?
- 27. Zugriff auf die Navigationsleiste aus einer Containeransicht
- 28. Wie blenden Sie die Menüleisten eines WPF DocumentViewer aus?
- 29. So blenden Sie die Untersteuerung der Elementvorlage aus, wenn sie nicht ausgewählt ist
- 30. So blenden Sie den Kontextmenüeintrag aus, wenn Sie die Maus auf das Raster bewegen
Ich kann nicht ApplicationPriority finden. In welcher Klasse ist es? Ich habe das gleiche Problem, aber für mich ist es zufällig. – Paparazzi
Ändern Sie den 'ApplicationPriority.Render' durch 'DispatcherPriority.Loaded' –