UWP WinUI 2.7环境下NavigationView导致标题栏与页面背景色差问题问询
问题原因
你遇到的色差本质是两层半透明亚克力(Acrylic)材质叠加导致的颜色加深,加上WinUI 2.7的NavigationView默认开启了标题栏自动适配逻辑,会额外渲染一层顶部背景填充,最终出现色差。
解决方案
- 第一步:删除外层Grid的
Background属性设置,或者直接改为Transparent,避免两层亚克力叠加变色。修改后的XAML结构如下:
<Grid ColumnSpacing="10.0"> <muxc:NavigationView x:Name="NavigationView" HorizontalContentAlignment="Left" IsBackButtonVisible="Collapsed" PaneDisplayMode="LeftMinimal" SelectionChanged="SelectionChanged" <!-- 新增两个配置项 --> IsTitleBarAutoPaddingEnabled="False" Background="{ThemeResource AcrylicBackgroundFillColorDefaultBrush}"> <muxc:NavigationView.MenuItems> <muxc:NavigationViewItem Content="Main Page" Icon="Home" Tag="MainPage" /> </muxc:NavigationView.MenuItems> <Frame x:Name="MainFrame" Margin="0,0,0,0" /> </muxc:NavigationView> </Grid>
- 第二步:在后台代码中动态设置内容区的顶部边距,避免页面内容被标题栏按钮遮挡,修改构造函数逻辑如下:
public MainPage() { this.InitializeComponent(); var coreTitleBar = CoreApplication.GetCurrentView().TitleBar; coreTitleBar.ExtendViewIntoTitleBar = true; var view = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView(); view.TitleBar.ButtonBackgroundColor = Windows.UI.Colors.Transparent; view.TitleBar.ButtonInactiveBackgroundColor = Windows.UI.Colors.Transparent; // 新增:动态适配标题栏高度,设置内容区顶部边距 MainFrame.Margin = new Thickness(0, coreTitleBar.Height, 0, 0); coreTitleBar.LayoutMetricsChanged += (s, e) => { MainFrame.Margin = new Thickness(0, coreTitleBar.Height, 0, 0); }; }
- 兼容说明:如果你使用的WinUI 2.x版本低于2.4,没有
IsTitleBarAutoPaddingEnabled属性,可以右键NavigationView选择「编辑模板」->「编辑副本」,在默认模板中找到名为TitleBar的Border控件,将它的Background属性设置为Transparent即可。
内容的提问来源于stack exchange,提问作者Cikappa2904
相关产品推荐
相关产品推荐

