Sto cercando di creare una finestra WPF che si apra già ingrandita, senza ridimensionamento / spostamento (nel menu di sistema, né nel bordo). Dovrebbe essere ingrandita in ogni momento, tranne quando l'utente la minimizza.
Ho provato a mettere WindowState = "Maximized" e ResizeMode = "CanMinimize", ma quando si apre la finestra, copre la barra delle attività (non lo voglio).
Ho un gancio per WndProc che annulla SC_MOVE e SC_SIZE. Posso anche fare questo controllo con condizioni in WndProc come "se il comando è ripristinato ed è minimizzato, ripristina, altro, blocca" e così via.
Ma il mio punto è se abbiamo un altro modo per farlo. Grazie per leggere ragazzi =)
risposte:
13 per risposta № 1È necessario scrivere WindowState="Maximized" ResizeMode="NoResize"
in xaml della tua finestra:
<Window x:Class="Miscellaneous.EditForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Edit Form" WindowState="Maximized" ResizeMode="NoResize"></Window>
2 per risposta № 2
public Window1()
{
InitializeComponent();
this.SourceInitialized += Window1_SourceInitialized;
}
private void Window1_SourceInitialized(object sender, EventArgs e)
{
WindowInteropHelper helper = new WindowInteropHelper(this);
HwndSource source = HwndSource.FromHwnd(helper.Handle);
source.AddHook(WndProc);
}
const int WM_SYSCOMMAND = 0x0112;
const int SC_MOVE = 0xF010;
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch (msg)
{
case WM_SYSCOMMAND:
int command = wParam.ToInt32() & 0xfff0;
if (command == SC_MOVE)
{
handled = true;
}
break;
default:
break;
}
return IntPtr.Zero;
}
1 per risposta № 3
Come ha sottolineato Tergiver, questo non è possibile inun modo puramente WPF. Devi usare P / Invoke. Per quanto riguarda il motivo per cui la finestra copre la barra delle applicazioni quando si apre, penso che stai incasinando alcune chiamate richieste annullando SC_MOVE e SC_SIZE. Forse dovresti annullare quelle chiamate dopo che la finestra è stata caricata.
0 per risposta № 4
WindowState="Maximized"
ResizeMode="NoResize"
WindowStyle="None"
WindowStyle = "None" fa quello che vuoi, ma ... perdi il titolo della finestra, il pulsante di chiusura e hai altri problemi.
Visita WindowStyle = "Nessuno" alcuni problemi