Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 执行绘制点列表(而不是路径)的方法_C#_Wpf_Performance_Xaml - Fatal编程技术网

C# 执行绘制点列表(而不是路径)的方法

C# 执行绘制点列表(而不是路径)的方法,c#,wpf,performance,xaml,C#,Wpf,Performance,Xaml,我得到了一份包含大约500点的列表。这些点应该画成一条路径。但每隔一段时间,我需要切换到“仅点”模式,该模式不会显示连续线,而只显示我的线所基于的点 如果找到一个简单的解决方案,使用性能不太好的ItemsControl: <ItemsControl ItemsSource="{Binding Line}"> <ItemsControl.ItemContainerStyle> <Style TargetType="FrameworkElemen

我得到了一份包含大约500点的
列表。这些点应该画成一条路径。但每隔一段时间,我需要切换到“仅点”模式,该模式不会显示连续线,而只显示我的线所基于的点

如果找到一个简单的解决方案,使用性能不太好的
ItemsControl

<ItemsControl ItemsSource="{Binding Line}">
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="FrameworkElement">
            <Setter Property="Canvas.Left" Value="{Binding X}" />
            <Setter Property="Canvas.Top" Value="{Binding Y}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate DataType="Point">
                <Ellipse Fill="GreenYellow" Width="2" Height="2" Margin="-1,-1,1,1"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>
当我画线的点时,有没有办法达到相同(或至少相似)的性能?现在绘制的圆点不需要具有特定的形状或大小

如果你发现这个问题:,但他们谈论的是10万点——我希望找到一个更简单的方法,因为我处理的问题要少得多


我需要以交互方式尽可能平滑地绘制这些点,至少15 FPS

只是出于兴趣,尝试将椭圆更改为矩形。在这些尺寸下,您将看不到圆角,矩形绘制速度更快。此外,如果点不移动,请将绑定更改为一次性

编辑:


好的,现在你已经添加了,这必须以15fps的速度更新,而不是一次绘制,我将回应Mike的评论,并将绕过绑定,只有一个画布控件。您可以使用所有矩形“加载”子对象一次,然后使用计时器循环每秒X次遍历子对象,并直接更改它们的canvas.left和canvas.top属性。

椭圆更改为
矩形确实可以提高性能,但只是一点点。在背面,省略号看起来确实更平滑,即使在如此小的比例下。尝试使用
画布
而不是
项控件
,并附加到
画布。子项
而不是绑定到
项控件的
项源
。当然,您将失去漂亮的MVVM绑定向导,但您追求的是速度,而不是关注点的分离。最快的方法是使用代码隐藏。可惜问题已经解决了。我正要展示一个绑定转换器是如何从
IEnumerable
转换为一个
StreamGeometry
的,它由一组零长度的线组成。该几何体将通过路径可视化,路径的
StrokeStartLineCap
StrokeEndLineCap
设置为
Round
,从而显示圆@DIF你可能会问一个新问题,明确要求这样一个转换器。我用高达20 fps的画布实现了您所需的功能。我无法回答您的问题,因为它已被搁置,但可能会对您有所帮助。事实证明,这是对@Clemens建议的详细阐述。请参见此处:
<Path Data="{Binding Path=Line, Converter={StaticResource ResourceKey=PointsToPath}}"
      Stroke="GreenYellow"
      StrokeThickness="2"/>