[英]Draw circle on wpf canvas according to its RenderTransform
因此,我试图将比例和平移值设置为wpf canvas渲染变换,然后根据此新变换矩阵绘制一些圆。
我有这样的代码。
设置画布渲染变换比例和平移属性。
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);
但是画布不会在圆点上应用变换矩阵,该怎么办?
表达方式
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.