c# - 根据其 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);
但是画布没有在圆点上应用变换矩阵,我该怎么办?
解决方案
表达方式
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;
推荐阅读
- java - Android Studio 中的文本重复器
- java - 处理百里香叶片段
- php - I unable to show user name on the page after login session
- asp.net - iisnode on Windows 10 Pro - from Internal error 500.19 to Error code: 0x800F0954
- apache-spark - Unable to create temp file for insert values in hive
- javascript - 根据数据库属性从 req.body 中动态选择值
- node.js - Node.js Jasmine helpers onComplete
- c - C qsort不对多维数组中的最后一项进行排序
- amazon-ec2 - Issues expanding a PVC in Kubernetes 1.9.9 / Kops 1.9.2 on AWS EC2 using allowVolumeExpansion
- android - How to set counter value in the application laucher icon in Oreo?