Windows store apps 什么是形状限制?

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

按下按钮时,以下程序将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: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))
                            });
                };
        }
    }
}