我们在写WPF窗体程序的时候,可能会有这么一个需求,我们在主窗体上再次打开一个窗体的时候会发现两个窗体的图标在任务栏中是合并的状态,就像下图这样。👇
但是我们有时候的需求需要把下面这两个窗体的图标分开,变为两个独立的图标,就像下面这样。👇
我们只需要借助TaskbarManagerHelper
类中的SetAppIdForWindow
这个方法即可实现。实现代码如下。
我们只需要在主窗体上面设置新开的窗体为独立的应用程序 ID即可。应用程序 ID 是与任务栏交互的一个标识符。通过为窗口设置一个唯一的应用程序 ID,你可以更好地管理任务栏上的图标和通知。
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
SecondWindow secondWindow = new SecondWindow();
//分离任务栏图标主要代码。
TaskbarManagerHelper.SetAppIdForWindow(secondWindow, "Gx3OptimisationWindow");
secondWindow.Show();
}
}
TaskbarManagerHelper.SetAppIdForWindow(传入你需要弹出的第二个窗口, 为一个String类型的字符串【可以使用Guid生成一个】);
TaskbarManagerHelper类
public static class TaskbarManagerHelper
{
// 导入 Windows API 中的设置任务栏应用程序 ID 的方法
[DllImport("shell32.dll", SetLastError = true)]
private static extern void SetCurrentProcessExplicitAppUserModelID([MarshalAs(UnmanagedType.LPWStr)] string AppID);
public static void SetAppIdForWindow(Window window, string appId)
{
var helper = new WindowInteropHelper(window);
SetCurrentProcessExplicitAppUserModelID(appId);
}
}
使用上述代码应该就可以解决两个窗口的图标在任务栏中不分离的问题了。有需要的可以参考。