c# - 有 .net 的 Css 编写器吗?

标签 c# .net css

我注意到微软已经实现了一个内部的 CssTextWriter

internal sealed class CssTextWriter : TextWriter
{
  ....
}

有 .net 的 Css 编写器吗?

例如我想写这样的代码:

CssTextWriter writer = new CssTextWriter(textWriter);
writer.WriteBeginCssRule("p");
writer.WriteAttribute("font-family", "Arial,Liberation Sans,DejaVu Sans,sans-serif");
writer.WriteEndCssRule();

上面的代码将输出到流中,如下所示:

p { font-family: Arial,Liberation Sans,DejaVu Sans,sans-serif; }

最佳答案

无点 http://www.dotlesscss.org/看起来它可以完成这项工作,但有点太多了我只需要一个 clss

我封装了对内部 Microsoft 类的调用(是的,这很顽皮,它可能会在未来的 .net 等版本中消失......)

public class CssTextWriter
{
    public CssTextWriter(TextWriter writer)
    {
        if (writer == null)
        {
            throw new ArgumentNullException("writer");
        }

        this.Writer = writer;
        this.Initialize();
    }

    /// <summary>
    /// Gets the writer.
    /// </summary>
    /// <value>
    /// The writer.
    /// </value>
    public TextWriter Writer { get; private set; }

    /// <summary>
    /// Gets or sets the internal CSS text writer.
    /// </summary>
    /// <value>
    /// The internal CSS text writer.
    /// </value>
    private object InternalCssTextWriter
    {
        get;

        set;
    }

     public void WriteBeginCssRule(string selector)
    {
        this.InternalCssTextWriter.InvokeMethod("WriteBeginCssRule", new[] { selector });
    }

    public void WriteEndCssRule()
    {
        this.InternalCssTextWriter.InvokeMethod("WriteEndCssRule");
    }

    public void WriteAttribute(string name, string value)
    {
        this.InternalCssTextWriter.InvokeMethod("WriteAttribute", new[] { name, value }, new Type[] { typeof(string), typeof(string) });
    }

    public void Write(string value)
    {
        this.InternalCssTextWriter.InvokeMethod("Write", new[] { value }, new Type[] { typeof(string) });
    }

    public void WriteAttribute(HtmlTextWriterStyle key, string value)
    {
        this.InternalCssTextWriter.InvokeMethod("WriteAttribute", new object[] { key, value }, new Type[] { typeof(HtmlTextWriterStyle), typeof(string) });
    }

    private void Initialize()
    {
        Type internalType = typeof(System.Web.UI.HtmlTextWriter).Assembly.GetType("System.Web.UI.CssTextWriter");
        ConstructorInfo ctor = internalType.GetConstructors(BindingFlags.Instance | BindingFlags.Public)[0];
        this.InternalCssTextWriter = ctor.Invoke(new[] { this.Writer });
    }
}

关于c# - 有 .net 的 Css 编写器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6775081/

相关文章:

c# - Visual Studio 2012 - 在 .NET 4.5 框架中找不到 System.Transactions 程序集

javascript - 计算段落相对于内容[数据]的高度(字符数)

javascript - 在顶部的元素框上滚动设置背景颜色

c# - 如何在代码隐藏中访问在 XAML 中创建的 DataContext 类实例?

c# - 什么是正确的修饰符?

c# - Visual Studio 2013 代码覆盖率 - 未检测二进制文件

c# - 通过 .NET 代码发送电子邮件

c# - 如何在 C# 中按进程获取打开的文件句柄列表?

c# - Xamarin Async ViewDidAppear 在 ViewDidLoad 期间调用

css - 缩小视口(viewport)时如何使图像居中?