2 Stimmen

Nicht größenveränderbare, umrandete WPF-Fenster mit WindowStyle=None

Ich brauche ein Fenster, das wie das folgende Bild aussieht: http://screenshots.thex9.net/2010-05-31_2132.png

(Ist NICHT größenveränderbar, behält aber den Glasrand bei)

Ich habe es geschafft, es mit Windows Forms zu arbeiten, aber ich muss WPF verwenden. Um es in Windows Forms zum Laufen zu bringen, habe ich den folgenden Code verwendet:

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x84 /* WM_NCHITTEST */)
        {
            m.Result = (IntPtr)1;
            return;
        }
        base.WndProc(ref m);
    }

Dies tut genau das, was ich will, aber ich kann nicht ein WPF-Äquivalent finden. Das nächste, was ich geschafft habe, mit WPF zu bekommen, verursacht das Fenster zu ignorieren jede Mauseingabe.

Jede Hilfe wäre sehr willkommen :)

2voto

Eine sehr einfache Lösung besteht darin, die minimale und maximale Größe jedes Fensters im Fensterkonstruktor auf eine feste Zahl zu setzen, etwa so:

public MainWindow()
{
    InitializeComponent();

    this.MinWidth = this.MaxWidth = 300;
    this.MinHeight = this.MaxHeight = 300;
}

Auf diese Weise kann der Benutzer die Breite und Höhe des Fensters nicht ändern. Außerdem müssen Sie die Eigenschaft "WindowStyle=None" setzen, um den Glasrand zu erhalten.

1voto

Thomas Levesque Punkte 277723

Sie müssen einen Haken für die Nachrichtenschleife hinzufügen:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var interopHelper = new WindowInteropHelper(this);
    var hwndSource = HwndSource.FromHwnd(interopHelper.Handle);
    hwndSource.AddHook(WndProcHook);
}

private IntPtr WndProcHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    if (msg == 0x84 /* WM_NCHITTEST */)
    {
         handled = true;
         return (IntPtr)1;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X