【问题标题】:Draw circle on wpf canvas according to its RenderTransform根据其 RenderTransform 在 wpf 画布上绘制圆圈
【发布时间】:2018-05-14 14:27:37
【问题描述】:

所以我试图为 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# wpf canvas


    【解决方案1】:

    表达式

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多