如何在任务栏中将新的 WPF window 显示为新的 app/icon (win10 c#wpf)
How to display a new WPF window as a new app/icon in the taskbar (win10 c#wpf)
我正在尝试在我的 WPF 应用程序中启动一个新的 window,但没有将其与主机应用程序堆叠在一起,我查看了 New taskbar icon when opening a window in WPF 上的 post,但是post 似乎适用于 windows 7,我正在尝试使用那里提供的代码,但出现 The value does not fall within the expected range
错误。据我了解,该应用程序不会在任务栏中显示为新图标,除非它具有不同的进程 ID。有什么办法可以让新 window 不在 windows 10 的任务栏中堆叠?
这是我试过的
using Microsoft.WindowsAPICodePack.Taskbar;
public void App_Startup(object sender, StartupEventArgs e)
{
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(new WindowInteropHelper(new window2()).Handle, "Gx3OptimisationWindow");
}
您必须更改 window 的 SourceInitialized
事件处理程序中的应用程序 ID,因为新创建的 WPF window 还没有句柄,只有在表示源初始化 window。在您的代码中,您尝试更改没有任何句柄(它为零)的 window 的应用程序 ID,因此您观察到错误
所以代替:
public void App_Startup(object sender, StartupEventArgs e)
{
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(new WindowInteropHelper(new window2()).Handle, "Gx3OptimisationWindow");
}
这样做:
class Window2
{
public Window2()
{
InitializeComponent();
SourceInitialized += (s, e) =>
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(
new WindowInteropHelper(this).Handle,
"Gx3OptimisationWindow");
}
}
我正在尝试在我的 WPF 应用程序中启动一个新的 window,但没有将其与主机应用程序堆叠在一起,我查看了 New taskbar icon when opening a window in WPF 上的 post,但是post 似乎适用于 windows 7,我正在尝试使用那里提供的代码,但出现 The value does not fall within the expected range
错误。据我了解,该应用程序不会在任务栏中显示为新图标,除非它具有不同的进程 ID。有什么办法可以让新 window 不在 windows 10 的任务栏中堆叠?
这是我试过的
using Microsoft.WindowsAPICodePack.Taskbar;
public void App_Startup(object sender, StartupEventArgs e)
{
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(new WindowInteropHelper(new window2()).Handle, "Gx3OptimisationWindow");
}
您必须更改 window 的 SourceInitialized
事件处理程序中的应用程序 ID,因为新创建的 WPF window 还没有句柄,只有在表示源初始化 window。在您的代码中,您尝试更改没有任何句柄(它为零)的 window 的应用程序 ID,因此您观察到错误
所以代替:
public void App_Startup(object sender, StartupEventArgs e)
{
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(new WindowInteropHelper(new window2()).Handle, "Gx3OptimisationWindow");
}
这样做:
class Window2
{
public Window2()
{
InitializeComponent();
SourceInitialized += (s, e) =>
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(
new WindowInteropHelper(this).Handle,
"Gx3OptimisationWindow");
}
}