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

能否检测NavigationView折叠按钮的点击事件?具体如何实现?

能否检测NavigationView折叠按钮按下事件及实现方法

可以检测该事件,WinUI的NavigationView已经提供了成熟的内置处理方案,不需要额外自定义控件或挖取控件模板。

方法1:直接订阅PaneOpening/PaneClosing事件(最简单通用)

折叠按钮点击的本质是触发NavigationView侧边栏(Pane)的展开/收起状态切换,直接订阅这两个内置事件即可捕获操作:

  • 首先修改你的XAML代码,添加事件绑定:
<muxc:NavigationView 
    PaneDisplayMode="LeftCompact" 
    IsBackButtonVisible="Collapsed" 
    gaze:GazeInput.Interaction="Disabled" 
    x:Name="Navbar" 
    Grid.ColumnSpan="2" 
    ItemInvoked="Navbar_ItemInvoked"
    PaneOpening="Navbar_PaneOpening"
    PaneClosing="Navbar_PaneClosing">
  • 然后在后台代码中添加对应的事件处理逻辑:
private void Navbar_PaneOpening(NavigationView sender, object args)
{
    // 折叠按钮被点击、侧边栏即将展开时执行的逻辑
}

private void Navbar_PaneClosing(NavigationView sender, NavigationViewPaneClosingEventArgs args)
{
    // 折叠按钮被点击、侧边栏即将收起时执行的逻辑
    // 若需要取消本次收起操作,设置 args.Cancel = true 即可
}

方法2:监听IsPaneOpen属性变更(兼容全场景触发的状态变更)

如果你需要同时捕获所有触发侧边栏状态变化的场景(包括后台代码主动修改状态、手势滑动侧边栏等),可以监听IsPaneOpen属性的变更:

  • 在页面初始化时注册属性变更监听:
public MainPage()
{
    this.InitializeComponent();
    Navbar.RegisterPropertyChangedCallback(NavigationView.IsPaneOpenProperty, OnIsPaneOpenChanged);
}

private void OnIsPaneOpenChanged(DependencyObject sender, DependencyProperty dp)
{
    bool isNowOpen = Navbar.IsPaneOpen;
    if (isNowOpen)
    {
        // 侧边栏展开时执行的逻辑
    }
    else
    {
        // 侧边栏收起时执行的逻辑
    }
}

注意:以上两种方法都会捕获所有触发侧边栏状态变更的操作,如果你需要严格区分只有用户点击折叠按钮的场景,可以额外给NavigationView模板内的ToggleButton绑定点击事件,但绝大多数业务场景下以上两种方法已经可以满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:15:02