首页 > 解决方案 > 根据其 RenderTransform 在 wpf 画布上绘制圆圈

问题描述

所以我试图将比例和平移值设置为 wpf 画布渲染变换,然后根据这个新的变换矩阵绘制一些圆圈。

我有这样的代码。

设置画布渲染变换比例和平移属性。

window.canvas.RenderTransform.Value.Scale(xScale, yScale);
window.canvas.RenderTransform.Value.Translate(offsetX, offsetY);

并添加一个像这样的圆圈。

Ellipse circle = new Ellipse()
{
    Width = 5,
    Height = 5,
    Stroke = Brushes.Red,
    StrokeThickness = 8
};
circle.SetValue(Canvas.LeftProperty, (double) x);
circle.SetValue(Canvas.TopProperty,  (double) y);
window.canvas.Children.Add(circle);

但是画布没有在圆点上应用变换矩阵,我该怎么办?

标签: c#wpfcanvas

解决方案


表达方式

window.canvas.RenderTransform.Value

返回变换矩阵的副本,因为struct Matrix是值类型,而不是引用类型。您对副本执行的任何操作都将丢失。

采用

var matrix = new Matrix();
matrix.Scale(xScale, yScale);
matrix.Translate(offsetX, offsetY);
window.canvas.RenderTransform = new MatrixTransform(matrix);

要不就

window.canvas.RenderTransform =
    new MatrixTransform(xScale, 0, 0, yScale, offsetX, offsetY);

如果 MatrixTransform 先前已分配给 RenderTransform 属性,您也可以只设置其Matrix值:

var matrix = new Matrix();
matrix.Scale(xScale, yScale);
matrix.Translate(offsetX, offsetY);
((MatrixTransform)window.canvas.RenderTransform).Matrix = matrix;

推荐阅读