c# - 窗口中的深色系统上下文菜单

标签 c# contextmenu pinvoke winui-3 winui

我正在使用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 设置或其他应用程序如何执行此操作?

最佳答案

尝试调用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();
}

关于c# - 窗口中的深色系统上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75835069/

相关文章:

c# - PInvoke SLAPI 函数

.net - 在 F# 中编码(marshal)具有 `char` 数组字段的结构数组

javascript - 如何使用 Prototype 禁用 mozilla 中某些元素的默认上下文菜单?

visual-studio - 我可以添加一个命令以使 ReSharper 重复上次测试运行到 Visual Studio 中的右键单击上下文菜单吗?

java - JTable右键复制/粘贴菜单一键复制单元格数据

c# - Rx 窗口、加入、GroupJoin?

c# - 在 Windows CE 6.0 CF.NET 2.0 上删除 ARP 条目

c# - 一起计算 sin 和 cos 的最快方法是什么?

c# - 这个比较器 C# 语法是如何工作的?

c# - 带有绑定(bind)列表和新行问题的数据 GridView