Ich möchte meine Anwendung so gestalten, dass sie auf Vollbild maximiert werden kann, dh die Windows-Taskleiste und die Titelleiste ausblenden. Und es sollte durch einen Knopf ausgelöst werden.
Ich versuche, mein Anwendungsfenster so zu entwickeln ...
Fügen Sie unten mein Code-Snippet hinzu
<controls:MetroWindow x:Class="EDUI.MainWindow"
xmlns:controls="clr-namespace:MahApps.Metro.Controls;Assembly=MahApps.Metro"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:EDiscoveryCore;Assembly=EDiscoveryCore"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
Title="eDi" BorderBrush="SkyBlue" BorderThickness="2" Height="999" Width="1071" WindowState="Maximized" x:Name="MainWindows">
Versuche dies:
<Window ShowTitleBar="False" IgnoreTaskbarOnMaximize="True">
Sie müssen WindowStyle auf none sowie WindowState auf Maximized setzen
<Window ...
WindowStyle="None"
WindowState="Maximized">
Sie müssen ResizeMode auf NoResize und WindowState auf Maximized setzen
<Window ...
ResizeMode="NoResize" WindowState="Maximized">
Wenn die Taskleiste nicht ausgeblendet wird, kann es hilfreich sein, die Sichtbarkeit des Fensters vor und nach dem Ändern des Fensterstils wie folgt zu ändern:
private void MainWindow_StateChanged(object sender, EventArgs e) {
if (this.WindowState == WindowState.Maximized) {
// hide the window before changing window style
this.Visibility = Visibility.Collapsed;
this.Topmost = true;
this.WindowStyle = WindowStyle.None;
this.ResizeMode = ResizeMode.NoResize;
// re-show the window after changing style
this.Visibility = Visibility.Visible;
}
else {
this.Topmost = false;
this.WindowStyle = WindowStyle.SingleBorderWindow;
this.ResizeMode = ResizeMode.CanResize;
}
}
Sie müssen nur den WindowStyle auf none setzen:
<Window ...
WindowStyle="None">
Schritt 1: Klasse mit statischen Methoden Hide () und Show () für die Taskleiste schreiben
public class Taskbar
{
[DllImport("user32.dll")]
private static extern int FindWindow(string className, string windowText);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int command);
private const int SW_HIDE = 0;
private const int SW_SHOW = 1;
protected static int Handle
{
get
{
return FindWindow("Shell_TrayWnd", "");
}
}
private Taskbar()
{
// hide ctor
}
public static void Show()
{
ShowWindow(Handle, SW_SHOW);
}
public static void Hide()
{
ShowWindow(Handle, SW_HIDE);
}
}
Schritt 2: Verbinden Sie sich mit Fenster Schließen-Ereignis, um die Taskleiste wieder anzuzeigen, wenn das Fenster mit Alt + F4 geschlossen wird
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
Taskbar.Show();
}
Taskleiste ausblenden und Vollbild anzeigen:
Taskbar.Hide();
WindowStyle = WindowStyle.None;
WindowState = WindowState.Maximized;
ResizeMode = ResizeMode.NoResize;
Width = System.Windows.SystemParameters.PrimaryScreenWidth;
Height = System.Windows.SystemParameters.PrimaryScreenHeight;
Topmost = true;
Left = 0;
Top = 0;
Taskleiste anzeigen und im Fenster ausführen
Taskbar.Show();
WindowStyle = WindowStyle.SingleBorderWindow;
WindowState = WindowState.Normal;
ResizeMode = ResizeMode.CanResize;
Width = System.Windows.SystemParameters.WorkArea.Width-100;
Height = System.Windows.SystemParameters.WorkArea.Height-100;
Topmost = false;
Left = 0;
Top = 0;
Getestet unter Windows 10 1703 (Creators Update)
Ich hatte dieses Problem mit der Taskleiste auf meinem Fenster. Die aktuelle Lösung, die ich verwende, besteht darin, das Fenster für eine kurze Zeit als oberstes Fenster festzulegen und dann wieder auf "falsch" zu setzen.
private Timer t;
public void OnLoad()
{
var window = Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive);
StartTopmostTimer(window);
}
private void StartTopmostTimer(Window window)
{
t = new Timer(o => SetTopMostFalse(window), null, 1000, Timeout.Infinite);
}
private void SetTopMostFalse(Window window)
{
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
window.Topmost = false;
}));
t.Dispose();
}
Ich verwende diesen Code auch, um zwischen dem Vollbildmodus und dem Fenstermodus zu wechseln:
public void SwitchFullScreen()
{
var window = Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive);
if (window != null)
{
if (window.WindowStyle == WindowStyle.None)
{
window.WindowStyle = WindowStyle.SingleBorderWindow;
window.WindowState = state;
}
else
{
state = window.WindowState;
window.WindowStyle = WindowStyle.None;
window.WindowState = WindowState.Maximized;
window.Topmost = true;
StartTopmostTimer(window);
}
}
}
Hängen Sie diesen Ereignishandler einfach an das Loaded-Ereignis des Formulars an. Das funktioniert einwandfrei.
Wenden Sie dieses Zeug nicht im Konstruktor des Formulars an (was für mich nicht funktioniert).
private void aWindow_Loaded(object sender, RoutedEventArgs e)
{
MaxHeight = SystemParameters.FullPrimaryScreenHeight;
MaxWidth = SystemParameters.FullPrimaryScreenWidth;
Width = SystemParameters.FullPrimaryScreenWidth;
Height = SystemParameters.FullPrimaryScreenHeight;
WindowState = WindowState.Maximized;
ResizeMode = ResizeMode.NoResize;
Left = 0;
Top = 0;
Topmost = true;
ShowInTaskbar = false;
//throw new NotImplementedException();
}