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
相关产品推荐
相关产品推荐

