【问题标题】:Redo functionality on InkCanvasInkCanvas 上的重做功能
【发布时间】:2016-10-03 18:02:20
【问题描述】:

我在 windows 10 build 14939 中使用 InkCanvasInkToolBar 来捕捉用户的笔触。

我想使用撤消/重做做一个自定义按钮,但是我无法创建以下内容:

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

然而visual studio对matr变量的抱怨

'参数类型'System.Numerics.Matrix3x2'不可分配给参数类型'Windows.Foundation.Numerics.Matrix3x2'

即使我的代码中没有任何地方引用 windows.foundation.numerics.matrix3x2。

有人对我如何使用CreateStrokeFromInkPoints 有任何想法或示例吗?

【问题讨论】:

    标签: uwp inkcanvas


    【解决方案1】:

    根据您的代码,我认为这里的问题是您在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);
    }
    

    【讨论】:

    • 感谢您的建议,但是随着更改,Visual Studio 仍然抱怨“Argment 类型“System.Numerics.Matrix3x2”的 matr 变量不可分配给参数类型“Windows.Foundation.Numerics.Matrix3x2” '。我现在很困惑,因为 Matrix3x2 应该是 System.Numerics(在 Visual Studio 中建议)还是 Windows.Foundation.Numerics(从上面的 msdn 链接建议)的类型。
    • @Jennifer 你用一个新的空白应用项目尝试过我的代码吗?它在我身边运作良好。如果您仍然有错误,那么它可能不在您发布的代码中。如果您可以分享可以重现您的问题的minimal reproducible example,这可能会有所帮助。
    • @Jennifer Windows.Foundation.Numerics.Matrix3x2 是基本的 Windows 运行时类型。如果你使用 C# 进行开发,那么你应该使用System.Numerics.Matrix3x2
    • 哇....谢谢杰伊 - 我已经尝试了一个新的空白项目,尽管 matr 在后面的代码中有红色波浪线,但它符合得很好。非常感谢,因为我已经花了几个小时了。
    猜你喜欢
    • 2011-03-15
    • 2023-03-10
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多