Je souhaite que mon application puisse être agrandie en plein écran, masquant ainsi la barre des tâches Windows et la barre de titre. Et cela devrait déclenché par un bouton.
J'essaie de développer la fenêtre de mon application comme celle-ci .
Ajouter mon extrait de code ci-dessous
<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">
Essaye ça:
<Window ShowTitleBar="False" IgnoreTaskbarOnMaximize="True">
Vous devez définir WindowStyle sur none et WindowState sur Maximized.
<Window ...
WindowStyle="None"
WindowState="Maximized">
Vous devez définir ResizeMode sur NoResize et WindowState sur Maximized.
<Window ...
ResizeMode="NoResize" WindowState="Maximized">
Si la barre des tâches ne disparaît pas, il peut être utile de changer la visibilité de la fenêtre avant et après le changement de style de la fenêtre, comme ceci:
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;
}
}
Il vous suffit de définir le WindowStyle sur none:
<Window ...
WindowStyle="None">
Étape 1: Écrire une classe avec des méthodes statiques Hide () et Show () pour la barre des tâches
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);
}
}
Étape 2: connexion à la fenêtre Evénement de fermeture pour récupérer la barre des tâches lorsque la fenêtre se ferme avec Alt + F4
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
Taskbar.Show();
}
Masquer la barre des tâches et afficher en plein écran:
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;
Afficher la barre des tâches et exécuter dans la fenêtre
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;
Testé sous Windows 10 1703 (Mise à jour des créateurs)
J'ai eu ce problème avec la barre des tâches restant au-dessus de ma fenêtre. La solution actuelle que j'utilise consiste à définir la fenêtre sur Topmost pour une courte période, puis à la redonner à false (je veux que ma fenêtre fonctionne correctement avec Alt + Tab)
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();
}
J'utilise également ce code pour basculer entre le mode plein écran et le mode fenêtre:
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);
}
}
}
Il suffit de connecter ce gestionnaire d’événements à l’événement Loaded du formulaire, qui fonctionne correctement.
N'appliquez pas ce genre de choses dans le constructeur du formulaire (ce qui ne fonctionnera pas pour moi).
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();
}