InkCanvas

时间:2016-10-03 18:02:21

标签: uwp inkcanvas

我在Windows 10 build 14939中使用InkCanvasInkToolBar来捕获用户墨迹。

我想用Undo / Redo做一个自定义按钮但是我无法创建以下内容:

private static InkStroke CreateStroke(List<InkPoint> redoInkPoints) {
     var strokeBuilder = new InkStrokeBuilder();
     Matrix3x2 matr = new Matrix3x2();
     return strokeBuilder.CreateStrokeFromInkPoints(redoInkPoints, matr);
}

然而,视觉工作室抱怨

的matr变量
  

&#39;细分类型&#39; System.Numerics.Matrix3x2&#39;不能分配给参数类型&#39; Windows.Foundation.Numerics.Matrix3x2&#39;

尽管我的代码中没有任何地方可以引用windows.foundation.numerics.matrix3x2。

任何人对我如何使用CreateStrokeFromInkPoints

有任何想法或示例

1 个答案:

答案 0 :(得分:0)

根据您的代码,我认为这里的问题是您在InkStrokeBuilder.CreateStrokeFromInkPoints方法中使用了错误的矩阵。在使用Matrix3x2 matr = new Matrix3x2();时,您正在创建零矩阵。它会将你的所有点都折叠成一个奇点,这在这里不是一个有效的值。要解决此问题,您可以使用代表单位矩阵的System.Numerics.Matrix3x2.Identity属性。以下是一个简单的示例:

XAML:

<StackPanel>
    <InkCanvas x:Name="inkCanvas" Width="500" Height="200" />
    <Button Click="Button_Click">Add a stroke</Button>
</StackPanel>

代码隐藏:

private void Button_Click(object sender, RoutedEventArgs e)
{
    List<InkPoint> inkPoints = new List<InkPoint> { new InkPoint(new Point(10, 10), 0.5f), new InkPoint(new Point(100, 100), 0.5f) };

    InkStroke stroke = CreateStroke(inkPoints);

    inkCanvas.InkPresenter.StrokeContainer.AddStroke(stroke);
}

private static InkStroke CreateStroke(List<InkPoint> redoInkPoints)
{
    var strokeBuilder = new InkStrokeBuilder();
    System.Numerics.Matrix3x2 matr = System.Numerics.Matrix3x2.Identity;
    return strokeBuilder.CreateStrokeFromInkPoints(redoInkPoints, matr);
}