2016-10-03 2 views
0

J'utilise le InkCanvas et InkToolBar dans Windows 10 build 14939 pour capturer les traits d'encre de l'utilisateur.Redo fonctionnalité sur InkCanvas

Je voudrais faire un bouton personnalisé avec Undo/Redo mais j'ai du mal à créer:

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

Cependant plaintes studio visuel sur la variable matr de

« Type Argment 'System.Numerics.Matrix3x2' n'est pas assignable au type de paramètre 'Windows.Foundation.Numerics.Matrix3x2'

même si je n'ai pas n'importe où dans mon code derrière référencer windows.foundation.numerics.matrix3x2.

Quelqu'un a eu une idée ou un exemple sur la façon dont j'utilise le CreateStrokeFromInkPoints?

Répondre

0

Selon votre code, je pense que le problème ici est que vous avez utilisé une matrice incorrecte dans la méthode InkStrokeBuilder.CreateStrokeFromInkPoints. Lorsque vous utilisez Matrix3x2 matr = new Matrix3x2();, vous créez une matrice zéro. Cela écraserait tous vos points en une singularité, ce qui n'est pas une valeur valide ici. Pour résoudre ce problème, vous pouvez utiliser la propriété System.Numerics.Matrix3x2.Identity qui représente la matrice d'identité. Et voici un exemple simple:

XAML:

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

code-behind:

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); 
} 
+0

Nous vous remercions de votre suggestion mais avec les changements, studio visuel encore des plaintes la variable matr de 'Type de segment' System.Numerics.Matrix3x2 'n'est pas assignable au type de paramètre' Windows.Foundation.Numerics.Matrix3x2 '. Je suis confus maintenant comme le Matrix3x2 devrait être le type de System.Numerics (suggéré dans Visual Studio) ou Windows.Foundation.Numerics (suggéré à partir du lien msdn ci-dessus). – Jennifer

+0

@Jennifer Avez-vous essayé mon code avec un nouveau projet Blank App? Cela fonctionne bien à mes côtés. Si vous avez toujours une erreur, cela peut ne pas être le cas dans le code que vous avez posté. Il peut être utile de partager un [mcve] qui peut reproduire votre problème. –

+0

@Jennifer 'Windows.Foundation.Numerics.Matrix3x2' est le type de Windows Runtime de base. Si vous utilisez C# pour développer, alors vous devriez utiliser 'System.Numerics.Matrix3x2'. –