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

WinUI3中阻止SplitView关闭面板且不中断鼠标事件的方法

解决WinUI 3 SplitView面板永久打开的问题

方法一:用SplitView内置属性直接固定面板

不用通过取消PaneClosing事件的方式,直接利用SplitView的原生属性就能让面板永久保持打开状态,从根源上避免关闭逻辑触发,自然也不会出现鼠标事件被阻止的问题。

在XAML里直接配置:

<SplitView x:Name="FixedPaneSplitView"
           DisplayMode="Inline"
           IsPaneOpen="True"
           PanePlacement="Left"
           PaneWidth="240">
    <!-- 面板内容 -->
    <SplitView.Pane>
        <StackPanel>
            <TextBlock Text="固定面板内容" Margin="10"/>
            <!-- 你的其他控件 -->
        </StackPanel>
    </SplitView.Pane>
    <!-- 主内容区域 -->
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBlock Text="主内容区域" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</SplitView>
  • DisplayMode="Inline":让面板和主内容区域并排固定显示,不会触发折叠/隐藏逻辑
  • IsPaneOpen="True":确保面板始终处于打开状态
  • PaneWidth可根据需求设置固定值或自适应宽度

如果要在后台代码动态设置:

FixedPaneSplitView.DisplayMode = SplitViewDisplayMode.Inline;
FixedPaneSplitView.IsPaneOpen = true;

方法二:用NavigationView替代(适配类似布局需求)

如果想要和SplitView外观接近但更省心的固定面板,也可以用NavigationView,设置PaneDisplayMode即可实现永久打开:

<NavigationView x:Name="FixedNavView"
                PaneDisplayMode="Left"
                IsPaneOpen="True">
    <!-- 导航面板内容 -->
    <NavigationView.MenuItems>
        <NavigationViewItem Content="首页"/>
        <NavigationViewItem Content="设置"/>
    </NavigationView.MenuItems>
    <!-- 主内容区域 -->
    <Frame x:Name="ContentFrame"/>
</NavigationView>

关于之前方法触发鼠标事件异常的原因

在PaneClosing事件里强制args.Cancel = true会中断SplitView内部的关闭状态流转,容易引发控件逻辑异常,进而干扰子元素的鼠标事件传递。用官方提供的固定显示模式是更贴合控件设计逻辑的安全方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:07:10