Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# WPF中的选择性缩放和平移_C#_Wpf - Fatal编程技术网

C# WPF中的选择性缩放和平移

C# WPF中的选择性缩放和平移,c#,wpf,C#,Wpf,我需要在我的总线调度图查看器中实现围绕X轴的缩放和平移,可能还有用C/WPF编写的编辑器。我可以使用简单的变换,但请注意,当点之间的距离变大时,点的大小保持不变。此外,无论我如何平移图表,公交车站的名称应保持在左侧的固定位置上: 使用当前方法,所有视觉效果都在单个ItemsControl上呈现,画布作为ItemsPanel和多个数据模板,每种类型的形状点、线段、时间分割线和桩号线对应一个。因此,每个形状都绑定到提供给画布的具有PosX和PosY属性的ViewModel: 当我需要平移或缩放时

我需要在我的总线调度图查看器中实现围绕X轴的缩放和平移,可能还有用C/WPF编写的编辑器。我可以使用简单的变换,但请注意,当点之间的距离变大时,点的大小保持不变。此外,无论我如何平移图表,公交车站的名称应保持在左侧的固定位置上:

使用当前方法,所有视觉效果都在单个ItemsControl上呈现,画布作为ItemsPanel和多个数据模板,每种类型的形状点、线段、时间分割线和桩号线对应一个。因此,每个形状都绑定到提供给画布的具有PosX和PosY属性的ViewModel:

当我需要平移或缩放时,我为每个形状的viewmodel调用PropertyChangedPosx。然后使用整个图形的PanX和ZoomX属性的新值重新计算该属性:

公共双PosX { 收到 { 返回_scheduleGraphViewModel.ZoomX*_schedulepointmodel.PlanTime+_scheduleGraphViewModel.PanX; } } 问题是这比我希望的要慢得多。在1000+点上,它几乎无法使用。探查器告诉我瓶颈在OnPropertyChanged方法中


我认为整个方法都是错误的,但我找不到或想不出更好的解决方案。

用如下结构分隔图形:

ParentGrid1
    StationNames
    ParentGrid2        // Apply transformation on this
        LinesInGraph
        PointsInGraph
            Point1     // Apply inverse transformation on each of these
            Point2
            Point3
            ...

谢谢,我刚刚意识到不仅我的模型和ViewModel类可以是分层的,而且视图控件也可以。平移现在很好,但缩放仍然是一个问题,因为我必须为每个点和线段调用OnPropertyChanged。