2010-05-18 4 views
2

J'utilise Script # dans Visual Studio 2010 pour importer l'API de l'élément HTML5 Canvas.Comment importer les propriétés d'une API externe dans le script #

Cela fonctionne très bien pour des choses comme FillRect(), MoveTo(), LineTo() et ainsi de suite. J'ai déclaré l'interface suivante, puis je peux le coder en C#. Ensuite, Script # le convertit bien en JavaScript.

public interface ICanvasContext 
{ 
    void FillRect(int x, int y, int width, int height); 
    void BeginPath(); 
    void MoveTo(int x, int y); 
    void LineTo(int x, int y); 
    void Stroke(); 
    void FillText(string text, int x, int y); 
} 

Je veux inclure la propriété strokeStyle qui prend une chaîne simple, mais je ne vois pas comment faire cela avec une interface. Les propriétés d'interface suivantes créent un préfixe dans le JavaScript, ce qui provoque son échec. Le code JavaScript résultant ne correspond pas à l'API HTML5 Canvas.

string StrokeStyle { get; set; } 
string Font { get; set; } 

La propriété précédente crée cette JavaScript:

ctx.set_strokeStyle('#FF0'); 

Comment puis-je obtenir Script # pour générer les propriétés d'affectation simples du contexte de la toile sans get_/préfixe set_?

Répondre

3

L'a obtenu! J'utilisais une interface, ce qui est bien dans certains cas, mais quand j'avais besoin du champ, je devais passer à une classe abstraite pour ne pas avoir l'erreur de compilation.

public abstract class Canvas : DOMElement 
{ 
    public abstract CanvasContext GetContext(string dimension); 
} 

public abstract class CanvasContext 
{ 
    public abstract void FillRect(int x, int y, int width, int height); 
    public abstract void BeginPath(); 
    public abstract void MoveTo(int x, int y); 
    public abstract void LineTo(int x, int y); 
    public abstract void Stroke(); 
    public abstract void FillText(string text, int x, int y); 

    public string StrokeStyle; 
    public string Font; 
} 

Ces deux classes abstraites me ont permis d'utiliser l'API Canvas HTML5 de script #, comme ceci:

public class MySample 
{ 
    public void DoWork(string canvasId) 
    { 
     Canvas canvas = (Canvas) Document.GetElementById(canvasId); 
     CanvasContext ctx = canvas.GetContext("2d"); 

     // ctx.FillRect(10,20,100,300); 

     ctx.BeginPath(); 
     ctx.MoveTo(10, 10); 
     ctx.LineTo(100, 300); 
     ctx.MoveTo(20,10); 
     ctx.LineTo(559,300); 
     ctx.StrokeStyle = "#F00"; 
     ctx.Stroke(); 
    } 
} 
0

Modifier la propriété dans un champ simple et il devrait fonctionner correctement ..

IE:

public string StrokeStyle; 
public string Font; 

Il infère et génère le get_/set_ pour les valeurs de propriété.

+1

Les interfaces ne peuvent pas contenir de champs, n'est-ce pas? Ajouter ceci à l'interface provoque une erreur de compilation. – a7drew

2

Une note rapide -

avec le script # 0.6, qui est maintenant public et disponible pour le téléchargement de http://projects.nikhilk.net/ScriptSharp, vous verrez les API Canvas prêtes à l'emploi dans Script.Web.dll.

Espérons que ça aide.