Как импортировать свойства внешнего API в Script # - PullRequest
2 голосов
/ 18 мая 2010

Я использую Script # внутри Visual Studio 2010 для импорта API для элемента HTML5 Canvas.

Отлично работает для таких вещей, как FillRect (), MoveTo (), LineTo () и так далее. Я объявил следующий интерфейс, а затем я могу код против него в C #. Затем Script # прекрасно преобразует его в 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);
}

Я хочу включить свойство StrokeStyle, которое принимает простую строку, но я не вижу, как это сделать с интерфейсом. Следующие свойства интерфейса создают префикс в JavaScript, который вызывает его сбой. Полученный JavaScript не будет соответствовать HTML5 Canvas API.

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

Предыдущее свойство создаст этот JavaScript:

ctx.set_strokeStyle('#FF0');

Как мне получить Script # для генерации простых свойств назначения контекста холста без префикса get_ / set_?

Ответы [ 3 ]

3 голосов
/ 19 мая 2010

Понял! Я использовал интерфейс, который подходит для некоторых случаев, но когда мне понадобилось поле, мне пришлось переключиться на абстрактный класс, чтобы не получить ошибку компиляции.

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;
}

Эти два абстрактных класса позволяют мне использовать HTML5 Canvas API из Script #, вот так:

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();
    }
}
2 голосов
/ 23 июня 2010

Одна быстрая заметка -

С помощью скрипта № 0.6, который теперь является общедоступным и доступен для загрузки с http://projects.nikhilk.net/ScriptSharp,, вы увидите готовые API-интерфейсы Canvas в Script.Web.dll.

Надеюсь, это поможет.

0 голосов
/ 18 мая 2010

Измените свойство в простое поле, и оно должно работать нормально.

IE:

 public string StrokeStyle;
 public string Font;

Выводит и генерирует get_ / set_ для значений свойств.

...