我在 Visual Studio 2010 中使用 Script# 导入 HTML5 Canvas 元素的 API。
它非常适合 FillRect()、MoveTo()、LineTo() 等。我已经声明了以下接口(interface),然后我可以在 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 属性,但我不知道如何使用界面来执行此操作。以下接口(interface)属性在 JavaScript 中创建前缀,这会导致其失败。生成的 JavaScript 将与 HTML5 Canvas API 不匹配。
string StrokeStyle { get; set; }
string Font { get; set; }
前面的属性将创建此 JavaScript:
ctx.set_strokeStyle('#FF0');
如何让 Script# 生成没有 get_/set_ 前缀的 Canvas 上下文的简单赋值属性?
最佳答案
明白了!我使用的是接口(interface),这在某些情况下没问题,但是当我需要该字段时,我必须切换到抽象类,以免出现编译错误。
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;
}
这两个抽象类让我可以使用 Script# 中的 HTML5 Canvas API,如下所示:
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();
}
}
关于script# - 如何将外部 API 的属性导入到脚本中#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2859869/