有.net的Css写手吗?
本文关键字:Css net | 更新日期: 2023-09-27 18:03:05
我注意到微软已经实现了一个内部的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/看起来会完成这项工作,但有点多,我只需要一个类
我包装了对内部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 });
}
}