我正在使用winui 3应用程序,当我将主题切换到黑暗模式时,系统上下文菜单(右击标题栏)没有更新为黑暗,所以我需要使用

[DllImport("uxtheme.dll", EntryPoint = "#135", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern int SetPreferredAppMode(int preferredAppMode);

但此代码仅在应用程序运行时才起作用:

SetPreferredAppMode(2); //Force Dark
InitializeComponent();

我需要在运行模式下根据主题变化更新系统上下文菜单. 例如,我需要在按钮单击事件中更改系统上下文菜单主题. 但系统上下文菜单主题不会在按钮单击事件中更新.

怎么啦?有没有其他强制更新系统上下文菜单主题的方法? Windows设置或其他应用程序是如何做到这一点的?

推荐答案

try 呼叫FlushMenuThemes()以在运行时更改系统上下文菜单的主题:

[DllImport("uxtheme.dll", EntryPoint = "#135", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern int SetPreferredAppMode(int preferredAppMode);

[DllImport("uxtheme.dll", EntryPoint = "#136", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern void FlushMenuThemes();

private void Button_Click(object sender, RoutedEventArgs e)
{
    ...
    SetPreferredAppMode(2);
    FlushMenuThemes();
}

Csharp相关问答推荐

为什么C#Bigbit不总是相同的比特长度?

如何在Visual Studio代码中更改大括号模式{},用于C#语言

为什么任务需要在内部使用ManualResetEventSlim?

使用Audit.EntityFramework,我如何将外键的值设置为相关实体上的属性?

如何在C#中创建VS代码中的控制台应用程序时自动生成Main方法

Google OAuth令牌交换在.Net中不起作用

在Windows Plesk上发布ASP.NET Core 7 Web API-错误:无法加载文件或程序集';Microsoft.Data.SqlClient';

在C#中,是否有与变量DISARD对应的C++类似功能?

毛伊岛.NET 8图片不再适合按钮

c#在后台实现类型化数组

测试单个对象是否与Func<;T,bool>;匹配

无法创建&Quot;&Quot;类型的实例,因为无法将一个或多个参数绑定到

在Swagger中显示自定义属性的属性名称

LINQ在GROUP BY和JOIN之后获取子列表

是否在异步方法中避免Span<;T>;.ToArray()?

MS Project读取项目自定义域

MudRadioGroup不切换

如何在C#Visual Studio IF语句中删除换行符

Firefox中的MudBlazor DataGrid单元格溢出

Dapper出错-无法将对象作为参数传递到Execute方法中