我发现很难理解如何简单地用位图的重复副本覆盖矩形XAML元素!我使用的是带有Windows App SDK的WinUI 3。我希望使用重复图像作为应用程序中的背景元素。
这似乎涉及到组合API。Deiderik Krohls和JetChopper给出了一些诱人的线索......然而(a)似乎没有针对所需接口的稳定发布的NuGet包,以及(b)这似乎是一个非常复杂的方法来做一些应该是简单的事情(c)这些解决方案似乎需要额外的工作才能与WinUI 3类(如ImageSource和BitmapImage)集成。
有什么建议吗?
3条答案
按热度按时间tzxcd3kk1#
您可以使用社区工具包中的TilesBrush。
安装CommunityToolkit.WinUI.UI.MediaNuGet软件包并尝试以下代码:
czfnxgou2#
你可以使用Direct2D效果,Tile Effect就是这样的效果。这种效果是硬件加速的。微软提供了一个名为Win2D的nuget,它可以在WinUI上实现这种效果:Microsoft.Graphics.Win2D
创建标准WinUI3应用程序项目后,添加此nuget,并为此XAML:
您可以使用如下C#代码显示图像的重复:
下面是我的StackOverflow头像作为位图源的结果:
图像是32x32,画布是128x128,所以我们有4x4的瓷砖。
mwngjboj3#
@simon-mourier的回答是我最终完成这项工作的关键。
我创建了一个TiledContentControl,它在平铺背景前面有一个ContentControl,并且当TileUriString属性更改时(例如,由于绑定),它会重新加载其位图图像。
还有属性TileWidth、TileHeight来控制平铺位图的绘制大小,以及AlignRight和AlignBottom来使位图与右边缘或下边缘对齐,而不是与左边缘或上边缘对齐。对齐参数对于在两个紧邻的TiledContentControl之间获得无缝连续性非常有用。
我把这个反馈给社区,感谢所有的帮助,我已经得到了各种编码挑战在过去。我已经做了一些基本测试,但没有广泛的测试。
使用的关键包是Microsoft.Graphics.Win2D 1.0.4和Microsoft.WindowsAppSDK 1.2。我在代码的注解中讨论了一些有趣的编码挑战。例如,在从WinUI 3 C#代码订阅Win 2D C++事件时,需要防止内存泄漏。
下面是TiledContentControl.xaml:
下面是TiledContentControl.xaml.cs: