当前位置:首页 > 操作系统 > Windows

Windows 10 Creaters Update 新功能——画中画模式和窗口高斯模糊

在Windows 10 Creaters Update中,可以给窗口设置高斯模糊了,只要几行代码!

            <span><</span>
            <span>Grid   </span>
            <span>Loaded</span>
            <span>="Grid_Loaded"</span>
            <span>></span>
            <span><</span>
            <span>Grid </span>
            <span>x:Name</span>
            <span>="mg"</span>
            <span>></</span>
            <span>Grid</span>
            <span>></span>
            <span><</span>
            <span>Grid </span>
            <span>Background</span>
            <span>="Blue"</span>
            <span> Opacity</span>
            <span>="0.4"</span>
            <span> x:Name</span>
            <span>="rootGrid"</span>
            <span>></</span>
            <span>Grid</span>
            <span>></span>
            <span><!--</span>
            <span>your uielements</span>
            <span>--></span>
            <span></</span>
            <span>Grid</span>
            <span>></span>
        
            <span>        Windows.UI.Composition.Compositor _compositor;
        Windows.UI.Composition.SpriteVisual _hostSprite;
        </span>
            <span>public</span>
            <span> MainPage()
        {
            </span>
            <span>this</span>
            <span>.InitializeComponent();
            _compositor </span>= Windows.UI.Xaml.Hosting.ElementCompositionPreview.GetElementVisual(<span>this</span><span>).Compositor;
        }

        </span><span>private</span><span>void</span> Grid_Loaded(<span>object</span><span> sender, RoutedEventArgs e)
        {
            _hostSprite </span>=<span> _compositor.CreateSpriteVisual();
            _hostSprite.Size </span>= <span>new</span> System.Numerics.Vector2((<span>float</span>)rootGrid.ActualWidth, (<span>float</span><span>)rootGrid.ActualHeight);

            ElementCompositionPreview.SetElementChildVisual(mg, _hostSprite);
            _hostSprite.Brush </span>=<span> _compositor.CreateHostBackdropBrush();
        }</span>

效果

技术分享

 

XAML里的那个Grid的颜色是可以换的,删了也行。那个是为了实现向开始菜单那样特定颜色的模糊。

不过这个方法在新增加的画中画模式无效

技术分享

关于如何实现画中画其实很简单

检测是否支持画中画

ApplicationView.GetForCurrentView().IsViewModeSupported(ApplicationViewMode.CompactOverlay)

进入画中画

            <span>bool</span> modeSwitched = <span>await</span> ApplicationView.GetForCurrentView().TryEnterViewModeAsync(ApplicationViewMode.CompactOverlay);
    ViewModePreferences compactOptions =<span> ViewModePreferences.CreateDefault(ApplicationViewMode.CompactOverlay);
    compactOptions.CustomSize </span>= <span>new</span> Windows.Foundation.Size(<span>320</span>, <span>200</span><span>);//你要的窗口大小
    </span><span>bool</span> modeSwitched = <span>await</span> ApplicationView.GetForCurrentView().TryEnterViewModeAsync(ApplicationViewMode.Default, compactOptions);

退出画中画

            <span>bool</span> modeSwitched = <span>await</span> ApplicationView.GetForCurrentView().TryEnterViewModeAsync(ApplicationViewMode.Default);

也可以结合UWP的多窗口功能

            <span>await</span> CoreApplication.CreateNewView().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =><span>
    {
        </span><span>var</span> frame = <span>new</span><span> Frame();
        compactViewId </span>=<span> ApplicationView.GetForCurrentView().Id;
        frame.Navigate(</span><span>typeof</span><span>(SecondaryCompactViewPage));
        Window.Current.Content </span>=<span> frame;
        Window.Current.Activate();
        ApplicationView.GetForCurrentView().Title </span>= <span>"</span><span>画中画窗口</span><span>"</span><span>;
    });
    </span><span>bool</span> viewShown = <span>await</span> ApplicationViewSwitcher.TryShowAsViewModeAsync(compactViewId, ApplicationViewMode.CompactOverlay);

微软的多窗口示例:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/MultipleViews

微软关于画中画功能的介绍:https://blogs.msdn.microsoft.com/universal-windows-app-model/2017/02/11/compactoverlay-mode-aka-picture-in-picture/

我还做了一个完整的示例,可以在这里下载https://git.oschina.net/PixeezPlus/Sharp2DDemo/tree/master/GaussianBlurWindow

还有一点需要注意,就是这些代码只在PC的Creaters Update以上版本有效

原文:http://www.cnblogs.com/yinyue200/p/6623307.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐