मैं WinApi का उपयोग करके WPF विंडो से विंडो आइकन को हटाने में सक्षम हूं, हालांकि जब मैं केवल WPF प्रोजेक्ट के निष्पादन योग्य चलाता हूं तो मुझे एप्लिकेशन विंडो में आइकन फिर से मिलता है।एक WPF विंडो से आइकन को हटाने
मैं आइकन कैसे हटा सकता हूं?
मैं WinApi का उपयोग करके WPF विंडो से विंडो आइकन को हटाने में सक्षम हूं, हालांकि जब मैं केवल WPF प्रोजेक्ट के निष्पादन योग्य चलाता हूं तो मुझे एप्लिकेशन विंडो में आइकन फिर से मिलता है।एक WPF विंडो से आइकन को हटाने
मैं आइकन कैसे हटा सकता हूं?
मैं 'LnDCobra' से नमूना संशोधित किया है तो यह (के रूप में 'थॉमस' एक संलग्न संपत्ति के रूप में इस्तेमाल किया जा सकता का सुझाव दिया:
<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
मेरे लिए यह डीबग मोड में ठीक काम करता है लेकिन अगर मैं इसे डीबग पर्यावरण से बाहर नहीं चलाता। –
स्वीकृत उत्तर .NET4.5 में काम नहीं करता था, जबकि आपका उत्तर मेरे लिए काम करता था। धन्यवाद! ने डीबग मोड में दृश्य स्टूडियो से और विंडोज एक्सप्लोरर से एक्सई चलाने के लिए दोनों काम किया। – sudarsanyes
WPFTutorial से:
कैसे एक 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);
}
}
उसी कोड का मैंने उपयोग किया है, जब मैं प्रोजेक्ट चलाता हूं तो मैं खिड़की से आइकन को नहीं हटाता .... जहां मैं उपयोग नहीं कर रहा हूं परियोजना – shraddha
@LnDCobra चलाने के लिए दृश्य स्टूडियो: अच्छा जवाब, +1। ध्यान दें कि आप आसानी से एक संलग्न संपत्ति है, जो itz हटा दिया हो रही एलान के तौर पर आइकन को हटाने, XAML –
में सक्षम होगा के रूप में यह लागू हो सकता है मेरी समस्या exe फ़ाइल – shraddha
मैं WPF विंडो के लिए आइकन (1x1 px) के रूप में बहुत छोटी पारदर्शी छवि का उपयोग करता हूं।
बस यहजोड़ेंआपकी खिड़की के गुणों के लिए।
खराब नहीं है। लेकिन यह बटन को अधिकतम/छोटा करता है –
डब्ल्यूपीएफ विंडो और एप्लिकेशन विंडो के बीच क्या अंतर है। और यदि आप नए प्रश्नों के उत्तर चाहते हैं तो कृपया पिछले प्रश्नों के उत्तर स्वीकार करें। – Timores
हां, कृपया पहले पिछले प्रश्नों के उत्तर स्वीकार करें। –
@LdnCobra, उत्कृष्ट उत्तर, लेकिन आपने पुराने प्रश्नों के उत्तर स्वीकार करने के लिए श्रद्धा को प्रोत्साहन नहीं दिया :-) – Timores