Windows store apps 什么是形状限制?
按下按钮时,以下程序将2000个Windows store apps 什么是形状限制?,windows-store-apps,winrt-xaml,Windows Store Apps,Winrt Xaml,按下按钮时,以下程序将2000个行对象添加到画布: MainPage.xaml: <Page x:Class="ManyLinesTestCs.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:ManyLines
行
对象添加到画布
:
MainPage.xaml
:
<Page
x:Class="ManyLinesTestCs.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ManyLinesTestCs"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Canvas x:Name="canvas" HorizontalAlignment="Left" Height="630" Margin="266,10,0,0" VerticalAlignment="Top" Width="1090"/>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="7,7,0,0" VerticalAlignment="Top"/>
</Grid>
</Page>
在我的系统上,按下按钮后,屏幕将填充开始屏幕背景色
如果我将计数更改为1500左右,则行将按预期显示
我意识到形状有点重,不打算以这种数量绘制
这里的限制是什么
在WPF中,一种轻量级的替代品,它可以替代完全启用的
Line
将其塑造为使用DrawingContext.DrawLine
。Winrt中是否有类似的替代方案?如果您出于学术原因询问,我不确定答案是否可用,我希望它依赖于硬件。但是如果你问这个问题是因为你需要画一个复杂的物体,上面有很多像这样的线段,我建议你使用Path
——它可以包含很多像你上面实验中那样的断开的线段 这里是上面MainPage.xaml.cs
的一个变体,它使用GeometryGroup
来包含许多LineGeometry
对象,正如杰瑞·尼克松所建议的那样。它确实允许数千条线段不发生碰撞
using System;
using System.Linq;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Shapes;
using Windows.UI;
using Windows.Foundation;
namespace ManyLinesTestCs
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
var geometryGroup = new GeometryGroup();
canvas.Children.Add(
new Path()
{
Stroke = new SolidColorBrush(Colors.SteelBlue),
StrokeThickness = 1.0,
Data = geometryGroup
});
var random = new Random();
button.Click += (s, e) =>
{
foreach (var elt in Enumerable.Range(0, 2000))
geometryGroup.Children.Add(
new LineGeometry()
{
StartPoint = new Point(random.Next((int)canvas.Width), random.Next((int)canvas.Width)),
EndPoint = new Point(random.Next((int)canvas.Width), random.Next((int)canvas.Width))
});
};
}
}
}
您是否在创建行时查看了应用程序的内存利用率?您可能会看到,要跟上逻辑的执行并编写行,需要付出很大的努力。如果你有一个类似的实验,但是所有的线都是在XAML中首先定义的,我会期待一个不同的结果。我发布了一个答案,实现了你的建议。谢谢干得好。记住标记你认为能解决你问题的答案。
using System;
using System.Linq;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Shapes;
using Windows.UI;
using Windows.Foundation;
namespace ManyLinesTestCs
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
var geometryGroup = new GeometryGroup();
canvas.Children.Add(
new Path()
{
Stroke = new SolidColorBrush(Colors.SteelBlue),
StrokeThickness = 1.0,
Data = geometryGroup
});
var random = new Random();
button.Click += (s, e) =>
{
foreach (var elt in Enumerable.Range(0, 2000))
geometryGroup.Children.Add(
new LineGeometry()
{
StartPoint = new Point(random.Next((int)canvas.Width), random.Next((int)canvas.Width)),
EndPoint = new Point(random.Next((int)canvas.Width), random.Next((int)canvas.Width))
});
};
}
}
}