2010-11-04 9 views
5

Je viens de passer de WinForms à wpf et dans WinForms supprimer la boîte de titre entier est très simple, il suffit de définir le titre = "" et ControlBox = false.WPF: Supprimer le titre/boîte de contrôle

Maintenant, il existe de nombreuses suggestions sur la façon de le faire avec wpf, toutes utilisant des appels natifs Win32. Bien qu'ils retirent le boîtier de contrôle, ils laissent toujours une bordure plus épaisse en haut.

This is how I want it to look.

Je suis certain que c'est faisable en utilisant une sorte d'appel natif, mais comment?

Répondre

8

Eh bien, essayez cette

WindowStyle="none" 

comme ceci:

<Window x:Class="Test.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" WindowStyle="None" 
    MinHeight="350" MaxHeight="350" MinWidth="525" MaxWidth="525"> 
<Grid> 

</Grid> 
</Window> 

Edit:

Il semble un peu stupide, mais de cette façon (avec Min - et MaxHeight/Width à la même taille) vous pouvez empêcher la fenêtre d'être redimensionnée

+0

Oh, je me sens un peu stupide maintenant . Quoi qu'il en soit, je me rends compte maintenant que j'ai essayé cette solution auparavant, mais la raison pour laquelle cela n'a pas fonctionné était parce que j'avais aussi défini ResizeMode = NoResize, cela supprime complètement la bordure. Donc, je suppose que la vraie question est: Comment obtenir le WindowStyle = None et en même temps empêcher la redimensionnement de la fenêtre? – moevi

+0

mis à jour ma réponse à votre nouvelle exigence – Tokk

0

Set WindowStyle = none

5

C'est une manière alternative de le faire. Pour supprimer le Max-/minimisez vous devez changer le ResizeMode comme celui-ci

<Window x:Class="MyWpfApplication.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="" Height="350" Width="525" ResizeMode="NoResize"> 
    <Grid> 

    </Grid> 
</Window> 

Après cela, vous pouvez supprimer le bouton Fermer en ajoutant ce (read more here)

private const int GWL_STYLE = -16; 
private const int WS_SYSMENU = 0x80000; 
[DllImport("user32.dll", SetLastError = true)] 
private static extern int GetWindowLong(IntPtr hWnd, int nIndex); 
[DllImport("user32.dll")] 
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 

public MainWindow() 
{ 
    SourceInitialized += Window_SourceInitialized; 
} 

void Window_SourceInitialized(object sender, EventArgs e) 
{ 
    var hwnd = new WindowInteropHelper(this).Handle; 
    SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU); 
} 
+0

mais nous allons vous laisser avoir la barre de titre, aussi. WindowsStyle = "none" fait exatly ce qui est montré dans l'image et est beaucoup plus simple ;-) – Tokk

+0

@Tokk, yup vu cela. Changé ma réponse pour dire que c'est une façon alternative! :) –

Questions connexes