回答
我已經從 'LnDCobra' 修改的樣本,因此它可以被用作附加屬性(如「Thomas的建議:
<Window
...
xmlns:i="clr-namespace:namespace-to-WindowEx"
i:WindowEx.ShowIcon = "false"
...
>
WindowEx的執行情況:
public class WindowEx
{
private const int GwlExstyle = -20;
private const int SwpFramechanged = 0x0020;
private const int SwpNomove = 0x0002;
private const int SwpNosize = 0x0001;
private const int SwpNozorder = 0x0004;
private const int WsExDlgmodalframe = 0x0001;
public static readonly DependencyProperty ShowIconProperty =
DependencyProperty.RegisterAttached(
"ShowIcon",
typeof (bool),
typeof (WindowEx),
new FrameworkPropertyMetadata(true, new PropertyChangedCallback((d, e) => RemoveIcon((Window) d))));
public static Boolean GetShowIcon(UIElement element)
{
return (Boolean) element.GetValue(ShowIconProperty);
}
public static void RemoveIcon(Window window)
{
window.SourceInitialized += delegate {
// Get this window's handle
var hwnd = new WindowInteropHelper(window).Handle;
// Change the extended window style to not show a window icon
int extendedStyle = GetWindowLong(hwnd, GwlExstyle);
SetWindowLong(hwnd, GwlExstyle, extendedStyle | WsExDlgmodalframe);
// Update the window's non-client area to reflect the changes
SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, SwpNomove |
SwpNosize | SwpNozorder | SwpFramechanged);
};
}
public static void SetShowIcon(UIElement element, Boolean value)
{
element.SetValue(ShowIconProperty, value);
}
[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hwnd, int index);
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hwnd, uint msg,
IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);
[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
int x, int y, int width, int height, uint flags);
}
}
從我+1,這工作的一種享受,謝謝! – Rob 2011-04-12 12:48:14
對我來說,這在調試模式下工作正常,但如果我在調試環境外運行它,則不會。 – 2012-01-25 15:46:34
接受的答案在.NET4.5中不起作用,而您的答案適用於我。謝謝! 從調試模式的視覺工作室,以及從Windows資源管理器運行exe工作。 – sudarsanyes 2014-07-08 07:19:09
如何刪除WPF窗口
的圖標不幸的是WPF不提供任何功能刪除窗口的圖標。一種解決方案可能是將圖標設置爲透明圖標。但是這樣窗口邊框和標題之間的額外空間仍然存在。
更好的方法是使用Win32 API提供的函數來刪除圖標。
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
protected override void OnSourceInitialized(EventArgs e)
{
IconHelper.RemoveIcon(this);
}
}
用於刪除圖標的助手類。
public static class IconHelper
{
[DllImport("user32.dll")]
static extern int GetWindowLong(IntPtr hwnd, int index);
[DllImport("user32.dll")]
static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);
[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
int x, int y, int width, int height, uint flags);
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hwnd, uint msg,
IntPtr wParam, IntPtr lParam);
const int GWL_EXSTYLE = -20;
const int WS_EX_DLGMODALFRAME = 0x0001;
const int SWP_NOSIZE = 0x0001;
const int SWP_NOMOVE = 0x0002;
const int SWP_NOZORDER = 0x0004;
const int SWP_FRAMECHANGED = 0x0020;
const uint WM_SETICON = 0x0080;
public static void RemoveIcon(Window window)
{
// Get this window's handle
IntPtr hwnd = new WindowInteropHelper(window).Handle;
// Change the extended window style to not show a window icon
int extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_DLGMODALFRAME);
// Update the window's non-client area to reflect the changes
SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE |
SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
}
}
我只是使用非常小的透明圖像作爲WPF窗口的圖標(1x1像素)。
只需添加此WindowStyle="ToolWindow"
添加到您的窗口屬性。
不錯。但是這也隱藏了最大化/最小化按鈕 – 2017-10-10 10:32:58
- 1. 如何從窗口中刪除視圖?
- 2. 在Visual Studio外部運行時從WPF窗口中刪除圖標
- 3. 如何刪除圖標並添加?在WPF窗口按鈕?
- 4. 從WPF的dll設置窗口圖標
- 5. WPF - 從模態窗口中刪除系統菜單圖標,而不是主應用程序窗口
- 6. Tkinter在Ubuntu中刪除標準窗口
- 7. 從窗口中拖動窗口WPF
- 8. 事件沒有從窗口中刪除
- 9. 從iframe的父窗口中刪除ID
- 10. 從窗口中刪除viewController iPhone
- 11. 從窗口中刪除按鈕
- 12. 從窗口中刪除小部件
- 13. EXC_BAD_ACCESS從陣列中刪除窗口
- 14. 從Eclipse窗口中刪除視圖 - >顯示視圖
- 15. 刪除一個窗口的背景圖像WPF
- 16. 如何從窗口中刪除Tkinter窗口小部件?
- 17. 將WPF BitmapSource轉換爲窗口圖標
- 18. 從彈出窗口中刪除標題欄和地址欄
- 19. 從窗口中刪除TK標題Python tkinter
- 20. 從主框架窗口標題刪除「無標題 - 」
- 21. 從谷歌地圖信息窗口中移除關閉圖標
- 22. WPF窗口標題中的上標
- 23. 如何從窗口管理器中刪除視圖?
- 24. 從窗口中刪除視圖給短時間的黑屏
- 25. 從嵌入式Google地圖中刪除信息窗口
- 26. 從當前窗口中刪除子視圖
- 27. 如何在現代窗口中設置窗體圖標wpf
- 28. 從繪圖對象中清除窗口
- 29. 刪除WPF窗口中的關閉按鈕
- 30. 從主窗口(窗口)調用WPF視圖(UserControl)方法
WPF窗口和應用程序窗口有什麼區別。 如果您想要回答新問題,請接受以前問題的答案。 – Timores 2010-02-26 11:56:04
是的,請先接受以前問題的答案。 – 2010-02-26 11:57:28
@LdnCobra,很好的答案,但你沒有給shraddha接受老問題的答案的動機:-) – Timores 2010-02-26 12:08:33