Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将WPF窗口发送到后面?_C#_.net_Wpf_Window - Fatal编程技术网

C# 如何将WPF窗口发送到后面?

C# 如何将WPF窗口发送到后面?,c#,.net,wpf,window,C#,.net,Wpf,Window,在我的应用程序中,我有一个用于绘制调试数据的窗口。当它加载时,我想在所有其他窗口后面的“后台”打开它 实现这一点的最佳方法是什么?您是否有任何特殊原因不希望以最小化状态显示窗口并允许用户显示它?如果以最小化状态显示窗口解决了问题,请使用 <Window WindowState="Minimized" (...)> 您可以使用以下代码: [DllImport("user32.dll")] static extern bool SetWindowPos( IntPtr hWnd

在我的应用程序中,我有一个用于绘制调试数据的窗口。当它加载时,我想在所有其他窗口后面的“后台”打开它


实现这一点的最佳方法是什么?

您是否有任何特殊原因不希望以最小化状态显示窗口并允许用户显示它?如果以最小化状态显示窗口解决了问题,请使用

<Window WindowState="Minimized" (...)>

您可以使用以下代码:

[DllImport("user32.dll")]
static extern bool SetWindowPos(
    IntPtr hWnd,
    IntPtr hWndInsertAfter,
    int X,
    int Y,
    int cx,
    int cy,
    uint uFlags);

const UInt32 SWP_NOSIZE = 0x0001;
const UInt32 SWP_NOMOVE = 0x0002;

static readonly IntPtr HWND_BOTTOM = new IntPtr(1);

static void SendWpfWindowBack(Window window)
{
    var hWnd = new WindowInteropHelper(window).Handle;
    SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
}

来源:

我希望窗口从一开始就在后台打开。感谢您的建议,但这对我没有帮助;您报告的代码不能按原样工作(请参阅链接的线程)。您需要添加:“const UInt32 SWP_NOACTIVATE=0x0010;”并将“SWP_NOSIZE | SWP_NOMOVE”替换为“SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE”。有了这个修改是可以的。我知道这个线程是旧的,但我需要一些建议。上面的代码可以工作,但是如果我随后将
.Topmost
设置为
true
,那么什么也不会发生。我不想
激活()。似乎有用。。。有点我也在尝试开发一个widget风格的应用程序,我发现缺少的答案是,当用户按下show desktop按钮时,应用程序被最小化。在这种情况下,我想把它放在桌面上。