Is it possible to display a wpf window without an icon in the title bar? Is it possible to display a wpf window without an icon in the title bar? wpf wpf

Is it possible to display a wpf window without an icon in the title bar?


Simple, add this code to your window:

[DllImport("user32.dll")]static extern uint GetWindowLong(IntPtr hWnd, int nIndex);[DllImport("user32.dll")]static extern int SetWindowLong(IntPtr hWnd, int nIndex, uint dwNewLong);private const int GWL_STYLE = -16;private const uint WS_SYSMENU = 0x80000;protected override void OnSourceInitialized(EventArgs e){    IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(this).Handle;    SetWindowLong(hwnd, GWL_STYLE,        GetWindowLong(hwnd, GWL_STYLE) & (0xFFFFFFFF ^ WS_SYSMENU));    base.OnSourceInitialized(e);}


While not exactly a proper solution, you could try one of the following things:

  1. Setting the WindowStyle-Property to ToolWindow will make the Icon disappear, but the title bar (obviously) will be smaller.

  2. Write a ControlTemplate for the whole Window. Depending on if the Window has to look like a "real" Window, there'd be much effort into trying to recreate the default Style in the Template.


I know this is answered, however Dan Rigsby's blog has an article that shows how to do this without hiding the minimize/maximize boxes.

I found this was frustrating me as I was using the articles (here and here but it kept hiding all the buttons when the sysmenu was hidden, to help I created this helper which as shown above call in OnSourceInitialized.

public static class WpfWindowHelper {    [DllImport("user32.dll")]    public static extern int GetWindowLong(IntPtr hwnd, int index);    [DllImport("user32.dll")]    public static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);    [DllImport("user32.dll")]    public static extern bool SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter, int x, int y, int width, int height, uint flags);    public const int GWL_EXSTYLE = -20;    public const int WS_EX_DLGMODALFRAME = 0x0001;    public const int SWP_NOSIZE = 0x0001;    public const int SWP_NOMOVE = 0x0002;    public const int SWP_NOZORDER = 0x0004;    public const int SWP_FRAMECHANGED = 0x0020;    public const int GWL_STYLE = -16;    public const int WS_MAXIMIZEBOX = 0x00010000;    public const int WS_MINIMIZEBOX = 0x00020000;    public const int WS_SYSMENU = 0x00080000;    public static void HideSysMenu(this Window w) {        IntPtr hwnd = new WindowInteropHelper(w).Handle;        int extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);        SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_DLGMODALFRAME);        SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);    }    public static void HideMinimizeBox(this Window w) {        IntPtr hwnd = new WindowInteropHelper(w).Handle;        SetWindowLong(hwnd, GWL_STYLE,            GetWindowLong(hwnd, GWL_STYLE) & ~(WS_MINIMIZEBOX));    }    public static void HideMaximizeBox(this Window w) {        IntPtr hwnd = new WindowInteropHelper(w).Handle;        SetWindowLong(hwnd, GWL_STYLE,            GetWindowLong(hwnd, GWL_STYLE) & ~(WS_MAXIMIZEBOX));    }    public static void HideMinimizeAndMaximizeBoxes(this Window w) {        IntPtr hwnd = new WindowInteropHelper(w).Handle;        SetWindowLong(hwnd, GWL_STYLE,            GetWindowLong(hwnd, GWL_STYLE) & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX));    }}