2010-11-04 7 views
5

acabo conmutada de WinForms a WPF y Windows Forms en la eliminación de toda la caja título es muy sencillo, basta con establecer el título = "" y ControlBox = false.WPF: Retire la caja de título/control de

Ahora hay muchas sugerencias sobre la manera de hacer esto con WPF, todos ellos con llamadas de Win32 nativa. Aunque eliminan la caja de control, aún dejan un borde más grueso en la parte superior.

This is how I want it to look.

estoy seguro de que es factible el uso de algún tipo de llamada nativa, pero ¿cómo?

Respuesta

8

Bueno, probar este

WindowStyle="none" 

así:

<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> 

Editar:

Se parece un poco estúpido, pero de esta manera (con Min - y MaxHeight/Width en el mismo tamaño) puede evitar que se cambie el tamaño de la ventana

+0

Oh, me siento un poco estúpido ahora . De todos modos, ahora me doy cuenta de que ya probé esa solución, pero la razón por la que no funcionó fue porque también configuré ResizeMode = NoResize, esto elimina por completo el borde. así que supongo que la verdadera pregunta es: ¿Cómo consigo el WindowStyle = Ninguno aspecto y al mismo tiempo evitar que la ventana sea redimensionada? – moevi

+0

actualicé mi respuesta a su nuevo requerimiento – Tokk

0

Conjunto WindowStyle = ninguno

5

Esta es una forma alternativa de hacerlo. Para quitar al max/minimizar necesita cambiar la ResizeMode como esto

<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> 

Después de que se puede quitar el botón Cerrar añadiendo este (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

pero nosotros le dejaremos tener la barra de título también. WindowsStyle = "none" hace exatly lo que se muestra en la imagen y es mucho más simple ;-) – Tokk

+0

@Tokk, yup vio eso. ¡Cambié mi respuesta para decir que es una forma alternativa! :) –

Cuestiones relacionadas