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

UWP开发:点击按钮触发NavigationView指定项高亮实现咨询

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:57:02