UWP开发:点击按钮触发NavigationView指定项高亮实现咨询
实现思路
不需要修改NavigationView默认的选中逻辑,只需定位到目标NavigationViewItem实例,直接修改其样式属性或附加自定义动画即可实现独立高亮效果,不会影响正常的导航选中交互。
具体实现步骤
- 提前给NavigationView的菜单项做好标记:如果是静态写死的4个选项,可以直接通过索引定位;如果是动态绑定生成的,给每个项设置唯一的Tag属性,后续通过Tag匹配定位目标项。
- 静态边框高亮实现示例:
private void HighlightTargetItem(int targetIndex) { // 索引从0开始计数,第二个项对应索引为1 if (NavigationView.MenuItems.Count <= targetIndex) return; var targetMenuItem = NavigationView.MenuItems[targetIndex] as NavigationViewItem; var itemContainer = NavigationView.ContainerFromItem(targetMenuItem) as NavigationViewItem; if (itemContainer == null) return; // 先重置所有项的边框,避免多个项同时高亮 foreach (var item in NavigationView.MenuItems) { var container = NavigationView.ContainerFromItem(item) as NavigationViewItem; if (container != null) { container.BorderThickness = new Thickness(0); container.BorderBrush = new SolidColorBrush(Colors.Transparent); } } // 给目标项设置高亮边框 itemContainer.BorderThickness = new Thickness(2); itemContainer.BorderBrush = new SolidColorBrush(Colors.OrangeRed); } // 按钮点击事件直接调用 private void HighlightSecondItemBtn_Click(object sender, RoutedEventArgs e) { HighlightTargetItem(1); }
- 边框闪烁高亮实现示例:
private void StartBlinkHighlight(int targetIndex) { if (NavigationView.MenuItems.Count <= targetIndex) return; var targetMenuItem = NavigationView.MenuItems[targetIndex] as NavigationViewItem; var itemContainer = NavigationView.ContainerFromItem(targetMenuItem) as NavigationViewItem; if (itemContainer == null) return; itemContainer.BorderThickness = new Thickness(2); itemContainer.BorderBrush = new SolidColorBrush(Colors.Transparent); // 创建闪烁动画 var blinkAnimation = new ColorAnimation { From = Colors.Transparent, To = Colors.Red, Duration = new Duration(TimeSpan.FromMilliseconds(400)), AutoReverse = true, RepeatBehavior = new RepeatBehavior(4) // 闪烁4次后停止 }; Storyboard.SetTarget(blinkAnimation, itemContainer.BorderBrush); Storyboard.SetTargetProperty(blinkAnimation, "(SolidColorBrush.Color)"); var storyboard = new Storyboard(); storyboard.Children.Add(blinkAnimation); storyboard.Begin(); // 动画结束后可选择保留高亮或恢复默认样式 storyboard.Completed += (s, e) => { // 如需恢复默认取消下面两行注释即可 // itemContainer.BorderThickness = new Thickness(0); // itemContainer.BorderBrush = new SolidColorBrush(Colors.Transparent); }; }
注意事项
- 不要通过修改NavigationView的SelectedItem属性实现高亮,会触发默认的页面跳转逻辑,和独立高亮的需求冲突。
- 如果菜单项会动态增删,不要用索引定位,改用Tag匹配的方式查找目标项,避免索引错位。
- 可以自行调整动画参数、边框粗细、颜色数值,适配你的应用设计风格。
内容的提问来源于stack exchange,提问作者Oeoela
相关产品推荐
相关产品推荐

