我在Windows 10 build 14939中使用InkCanvas
和InkToolBar
来捕获用户墨迹。
我想用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
?
答案 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);
}