C# WPF中的选择性缩放和平移
我需要在我的总线调度图查看器中实现围绕X轴的缩放和平移,可能还有用C/WPF编写的编辑器。我可以使用简单的变换,但请注意,当点之间的距离变大时,点的大小保持不变。此外,无论我如何平移图表,公交车站的名称应保持在左侧的固定位置上: 使用当前方法,所有视觉效果都在单个ItemsControl上呈现,画布作为ItemsPanel和多个数据模板,每种类型的形状点、线段、时间分割线和桩号线对应一个。因此,每个形状都绑定到提供给画布的具有PosX和PosY属性的ViewModel: 当我需要平移或缩放时,我为每个形状的viewmodel调用PropertyChangedPosx。然后使用整个图形的PanX和ZoomX属性的新值重新计算该属性: 公共双PosX { 收到 { 返回_scheduleGraphViewModel.ZoomX*_schedulepointmodel.PlanTime+_scheduleGraphViewModel.PanX; } } 问题是这比我希望的要慢得多。在1000+点上,它几乎无法使用。探查器告诉我瓶颈在OnPropertyChanged方法中C# WPF中的选择性缩放和平移,c#,wpf,C#,Wpf,我需要在我的总线调度图查看器中实现围绕X轴的缩放和平移,可能还有用C/WPF编写的编辑器。我可以使用简单的变换,但请注意,当点之间的距离变大时,点的大小保持不变。此外,无论我如何平移图表,公交车站的名称应保持在左侧的固定位置上: 使用当前方法,所有视觉效果都在单个ItemsControl上呈现,画布作为ItemsPanel和多个数据模板,每种类型的形状点、线段、时间分割线和桩号线对应一个。因此,每个形状都绑定到提供给画布的具有PosX和PosY属性的ViewModel: 当我需要平移或缩放时
我认为整个方法都是错误的,但我找不到或想不出更好的解决方案。用如下结构分隔图形:
ParentGrid1
StationNames
ParentGrid2 // Apply transformation on this
LinesInGraph
PointsInGraph
Point1 // Apply inverse transformation on each of these
Point2
Point3
...
谢谢,我刚刚意识到不仅我的模型和ViewModel类可以是分层的,而且视图控件也可以。平移现在很好,但缩放仍然是一个问题,因为我必须为每个点和线段调用OnPropertyChanged。