在一个通用的Windows应用程序中,我尝试使用一个背景图像(来自ImageSource)并将其平铺在控件上。
XAML语言
<Grid x:Name="gridBackground">
<ContentPresenter />
</Grid>
C#
void UpdateBackground(ImageSource source)
{
// ...
gridBackground.Background = new ImageBrush {
ImageSource = source,
Stretch = Stretch.None
};
}
根据MSDN,ImageBrush继承自TileBrush,它甚至说:
ImageBrush的用途包括文本的装饰效果,或控件或布局容器的平铺背景。
我假设这应该平铺图像,如果拉伸是禁用的,但是唉,它只是在控件的中间绘制图像,我没有看到任何实际的属性使它平铺。
在WPF中,有一个TileMode属性,可以设置ViewPort来指定平铺的尺寸,但在通用平台下似乎没有。
previous question指的是WinRT(Windows 8),但我希望使用基于画笔的解决方案,而不是用图像填充画布。
如何使用UWP平铺背景图像?
5条答案
按热度按时间57hvy0tb1#
前面的问题涉及到WinRT(Windows 8),但我希望使用基于画笔的解决方案,而不是用图像填充画布。
目前,在UWP应用程序中以平铺模式显示背景图像只有两种解决方案,您所知道的第一种解决方案是填充画布。
我使用的第二个方法是创建一个Panel并在上面绘制图像,这个想法源自this article
我修改了一些代码并修复了一些问题:
用法:
检查Github中的解决方案
kuuvgm7e2#
所有这些变体对GPU来说都很沉重。你应该通过CompositionAPI使用BorderEffect来制作。
我尝试了1000000x1000000大小的精灵,它的工作没有任何努力。
如果您的大小大于16386px,Win2d将引发异常。
2vuwiymt3#
实际上,现在可以创建一个自定义笔刷(借助Composition API和Win2D)来实现平铺效果。UWP TiledBrush
简而言之,您只需子类化
XamlCompositionBrushBase
并覆盖它的OnConnected
方法:然后按预期使用它:
bn31dyow4#
请参阅我对this question的回答:
你可以使用Win2D库平铺,他们也有sample code;在“效果”下有一个平铺示例(
EffectsSample.xaml.cs
)。qc6wkl3g5#
我们在Windows社区工具包中提供了
TilesBrush
:我们也有
TileControl
,它允许动画。