在我正在编写的一个简单的纯代码 WPF 应用程序中,我想要一个自定义的 Canvas
。
我在 StackOverflow 中发现了与此类似的问题,但找不到确切的问题,也找不到针对我的特定问题调整另一个答案的简单方法(请注意,我在 WPF 方面经验不多)。
在我的 Canvas 中,我希望它具有以下属性:
- 点 (0, 0) 位于
Canvas
的中心; - x轴指向右边;
- y轴指向顶部;
- 点 (1, 0) 位于原点右侧约 1 英寸处;和
- 在每个事件中,鼠标的位置都在上面定义的坐标系中给出。
在this answer , Ray Burns 针对我的前 3 点提出了一个非常简单的解决方案。修改该代码使其也处理我的第 4 点是微不足道的(将 RenderTransform
中的 1
和 -1
更改为其他常量)。
然而,对于许多问题来说,这个非常简单和优秀的解决方案是基于将宽度和高度设置为 0,并将 Canvas 居中放置在其容器上。因此,没有 Canvas 来捕获点击等事件,因此该解决方案不会处理我的第五个属性。
实现此目标的最简单方法是什么?继承自 Panel
并手动完成所有操作?继承Canvas
,拦截每一个事件并修改坐标?
最佳答案
将 Canvas
放在 Border
中。 Border
有鼠标事件。另一种情况是将 Border
放在 Canvas
的顶部。
关于WPF Canvas : centered origin, 缩放轴(和 y 反转),响应鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2235790/