在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)!