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

Windows 10四月更新后ParallaxView视差效果失效,如何恢复?

修复Windows 10四月更新后ParallaxView视差失效问题

我之前也踩过这个坑——Windows 10四月更新(1803版本)推出后,ParallaxView的自动视差效果确实会因为系统对视觉树检测的调整而失效。针对你贴的微软官方示例代码,这里有几个经过实际验证的修复方案:

方案1:直接绑定到ListView的内部ScrollViewer

四月更新后,ParallaxView对Source属性的要求更严格了,原来绑定到ListView本身的方式可能无法准确捕获滚动事件。我们可以直接绑定到ListView内置的ScrollViewer:

修改后的XAML代码:

<Grid>
    <!-- 背景视差元素 -->
    <ParallaxView Source="{x:Bind ForegroundElement.ScrollViewer}" VerticalShift="50">
        <Image x:Name="BackgroundImage" Source="Assets/SplashScreen.scale-200.png" Stretch="UniformToFill"/>
    </ParallaxView>
    
    <!-- 前景滚动列表 -->
    <ListView x:Name="ForegroundElement">
        <x:String>Item 1</x:String>
        <x:String>Item 2</x:String>
        <x:String>Item 3</x:String>
        <x:String>Item 4</x:String>
        <x:String>Item 5</x:String>
        <x:String>Item 6</x:String>
        <x:String>Item 7</x:String>
        <x:String>Item 8</x:String>
        <x:String>Item 9</x:String>
        <x:String>Item 10</x:String>
        <x:String>Item 11</x:String>
        <x:String>Item 13</x:String>
        <x:String>Item 14</x:String>
        <x:String>Item 15</x:String>
        <x:String>Item 16</x:String>
        <x:String>Item 17</x:String>
        <x:String>Item 18</x:String>
        <x:String>Item 19</x:String>
        <x:String>Item 20</x:String>
        <x:String>Item 21</x:String>
    </ListView>
</Grid>

这个改动最简洁,直接让ParallaxView监听滚动容器的偏移,大部分场景下都能恢复视差效果。

方案2:手动通过代码控制视差位移

如果方案1不生效,我们可以绕开ParallaxView的自动绑定,直接通过代码监听滚动事件并控制背景元素的位移:

首先在后台C#中添加以下代码:

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    // 找到ListView内部的ScrollViewer
    var scrollViewer = FindVisualChild<ScrollViewer>(ForegroundElement);
    if (scrollViewer != null)
    {
        scrollViewer.ViewChanged += ScrollViewer_ViewChanged;
    }
}

private void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
    var scrollViewer = sender as ScrollViewer;
    // 计算视差位移:这里的0.5是比例,对应原来的VerticalShift效果,可按需调整
    BackgroundImage.Translation = new Vector3(0, (float)(scrollViewer.VerticalOffset * 0.5), 0);
}

// 辅助方法:遍历视觉树查找子元素
private T FindVisualChild<T>(DependencyObject parent) where T : DependencyObject
{
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
    {
        var child = VisualTreeHelper.GetChild(parent, i);
        if (child is T target)
            return target;
        var result = FindVisualChild<T>(child);
        if (result != null)
            return result;
    }
    return null;
}

记得给页面添加Loaded事件绑定:

<Page ... Loaded="MainPage_Loaded">

这种方式兼容性最强,完全不受系统API调整的影响,适合各种复杂布局场景。

方案3:确认项目的目标版本设置

最后别忘了检查你的项目配置:确保应用的目标版本和最低版本都设置为Windows 10 1803(版本号10.0.17134.0)或更高。因为四月更新后ParallaxView的API有细微调整,版本不匹配也可能导致效果失效:

  • 右键项目 → 属性 → 应用 → 在“目标版本”和“最低版本”下拉框中选择对应版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:43:10