图像作为背景图案或平铺 - UWP
Image as background pattern or tiling - UWP
几年来我一直在开发 wpf 应用程序,我曾经使用以下代码平铺图像并将其用作背景图案:
<ImageBrush ImageSource="/Images/GroupPattern.png" TileMode="Tile" ViewportUnits="Absolute" Viewport="0,0,32,32"/>
然而,平铺似乎在 UWP 中不起作用,经过一些研究我没有找到任何东西。
那么,有没有人认为什么是等效的?
谢谢!
正如@JohnnyWestlake 所指出的,您可以使用 Microsoft Win2D 库。只需将此代码片段添加到您 xaml:
<Page .....
xmlns:win2d="using:Microsoft.Graphics.Canvas.UI.Xaml"
.....>
<Grid>
<win2d:CanvasControl CreateResources="BackgroundCanvas_CreateResources"
Draw="BackgroundCanvas_Draw" />
</Grid>
</Page>
并且在.xaml.cs文件中如下:
using Microsoft.Graphics.Canvas;
using Microsoft.Graphics.Canvas.Brushes;
using Microsoft.Graphics.Canvas.UI;
using Microsoft.Graphics.Canvas.UI.Xaml;
.......
private CanvasBitmap backgroundImage;
private CanvasImageBrush backgroundBrush;
private void BackgroundCanvas_CreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args)
{
args.TrackAsyncAction(Task.Run(async () =>
{
string uri = "ms-appx:///Assets/Images/GroupPattern.png";
backgroundImage = await CanvasBitmap.LoadAsync(sender, new Uri(uri));
backgroundBrush = new CanvasImageBrush(sender, backgroundImage);
// Set the brush's edge behaviour to wrap, so the image repeats if the drawn region is too big
backgroundBrush.ExtendX = backgroundBrush.ExtendY = CanvasEdgeBehavior.Wrap;
backgroundBrush.Transform = System.Numerics.Matrix3x2.CreateScale(0.5f);
}).AsAsyncAction());
}
private void BackgroundCanvas_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
var session = args.DrawingSession;
session.FillRectangle(new Rect(new Point(), sender.RenderSize), backgroundBrush);
}
希望对您有所帮助)
几年来我一直在开发 wpf 应用程序,我曾经使用以下代码平铺图像并将其用作背景图案:
<ImageBrush ImageSource="/Images/GroupPattern.png" TileMode="Tile" ViewportUnits="Absolute" Viewport="0,0,32,32"/>
然而,平铺似乎在 UWP 中不起作用,经过一些研究我没有找到任何东西。
那么,有没有人认为什么是等效的?
谢谢!
正如@JohnnyWestlake 所指出的,您可以使用 Microsoft Win2D 库。只需将此代码片段添加到您 xaml:
<Page .....
xmlns:win2d="using:Microsoft.Graphics.Canvas.UI.Xaml"
.....>
<Grid>
<win2d:CanvasControl CreateResources="BackgroundCanvas_CreateResources"
Draw="BackgroundCanvas_Draw" />
</Grid>
</Page>
并且在.xaml.cs文件中如下:
using Microsoft.Graphics.Canvas;
using Microsoft.Graphics.Canvas.Brushes;
using Microsoft.Graphics.Canvas.UI;
using Microsoft.Graphics.Canvas.UI.Xaml;
.......
private CanvasBitmap backgroundImage;
private CanvasImageBrush backgroundBrush;
private void BackgroundCanvas_CreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args)
{
args.TrackAsyncAction(Task.Run(async () =>
{
string uri = "ms-appx:///Assets/Images/GroupPattern.png";
backgroundImage = await CanvasBitmap.LoadAsync(sender, new Uri(uri));
backgroundBrush = new CanvasImageBrush(sender, backgroundImage);
// Set the brush's edge behaviour to wrap, so the image repeats if the drawn region is too big
backgroundBrush.ExtendX = backgroundBrush.ExtendY = CanvasEdgeBehavior.Wrap;
backgroundBrush.Transform = System.Numerics.Matrix3x2.CreateScale(0.5f);
}).AsAsyncAction());
}
private void BackgroundCanvas_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
var session = args.DrawingSession;
session.FillRectangle(new Rect(new Point(), sender.RenderSize), backgroundBrush);
}
希望对您有所帮助)