You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI 3中如何刷新NavigationView选中项的背景?

解决WinUI 3中NavigationView选中项背景不即时更新的问题

方法1:手动触发选中项的视觉状态切换

设置完资源后,找到当前选中的NavigationViewItem,通过VisualStateManager强制切换其视觉状态,触发UI刷新:

private void Frame_Navigated(object sender, NavigationEventArgs e)
{
    // 设置目标背景资源
    MyNavigationView.Resources["NavigationViewItemBackgroundSelected"] = TargetPageBackgroundColor;
    MyNavigationView.Resources["NavigationViewItemBackgroundSelectedPointerOver"] = TargetPageBackgroundColor;

    // 获取当前选中的NavigationViewItem
    if (MyNavigationView.SelectedItem is NavigationViewItem selectedItem)
    {
        // 先切换到Normal状态再切回Selected,强制刷新视觉表现
        VisualStateManager.GoToState(selectedItem, "Normal", true);
        VisualStateManager.GoToState(selectedItem, "Selected", true);

        // 如果指针仍悬停在选中项上,同步切换到PointerOverSelected状态
        if (selectedItem.IsPointerOver)
        {
            VisualStateManager.GoToState(selectedItem, "PointerOverSelected", true);
        }
    }
}

方法2:强制布局更新(辅助方案)

如果视觉状态切换无效,可以尝试强制选中项重新布局,确保资源变更生效:

if (MyNavigationView.SelectedItem is NavigationViewItem selectedItem)
{
    selectedItem.InvalidateArrange();
    selectedItem.UpdateLayout();
}

补充说明

设置资源后UI不即时更新的核心原因是NavigationViewItem的视觉状态不会自动监听资源变化,必须手动触发状态重绘。优先使用方法1,它直接针对WinUI的视觉状态系统,更贴合控件渲染逻辑。

内容的提问来源于stack exchange,提问作者sjb-sjb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:55:22