diff --git a/src/lib/MBS.Web/Control.cs b/src/lib/MBS.Web/Control.cs index 237e65e..c195586 100644 --- a/src/lib/MBS.Web/Control.cs +++ b/src/lib/MBS.Web/Control.cs @@ -1,3 +1,4 @@ +using System.Text; using System.Xml; using MBS.Web.UI; @@ -13,6 +14,7 @@ public abstract class Control : IWebHandler } public Dictionary PathVariables { get; } = new Dictionary(); + public Dictionary StyleProperties { get; } = new Dictionary(); public bool Visible { get; set; } = true; public Control(Dictionary? pathVariables = null) @@ -39,6 +41,12 @@ public abstract class Control : IWebHandler return new string[0]; } + private IReadOnlyDictionary _emptyStyleProperties = new Dictionary(); + protected virtual IReadOnlyDictionary GetStyleProperties() + { + return _emptyStyleProperties; + } + private bool _initted = false; protected void EnsureInitialized() { @@ -65,6 +73,8 @@ public abstract class Control : IWebHandler writer.WriteStartElement(TagName); bool classListWritten = false; + bool styleListWritten = false; + IDictionary attrs = GetControlAttributes(); foreach (KeyValuePair kvp in attrs) { @@ -76,6 +86,13 @@ public abstract class Control : IWebHandler value = String.Join(' ', classList); classListWritten = true; } + else if (kvp.Key == "style") + { + // IDictionary classList = GetStyleProperties().Union(kvp.Value.Split(new char[] { ';' })); + + // value = String.Join(' ', classList); + // classListWritten = true; + } writer.WriteAttributeString(kvp.Key, value); } @@ -84,8 +101,28 @@ public abstract class Control : IWebHandler { writer.WriteAttributeString("class", String.Join(' ', actualClassList)); } + + IEnumerable> actualStyleProperties = GetStyleProperties().Union(StyleProperties); + if (!styleListWritten && actualStyleProperties.Count() > 0) + { + writer.WriteAttributeString("style", RenderStyleProperties(actualStyleProperties)); + } } - protected virtual void RenderEndTag(XmlWriter writer) + + private string RenderStyleProperties(IEnumerable> actualStyleProperties) + { + StringBuilder sb = new StringBuilder(); + foreach (KeyValuePair kvp in actualStyleProperties) + { + sb.Append(kvp.Key); + sb.Append(':'); + sb.Append(kvp.Value); + sb.Append(';'); + } + return sb.ToString(); + } + + protected virtual void RenderEndTag(XmlWriter writer) { writer.WriteEndElement(); } diff --git a/src/lib/MBS.Web/UI/WebControls/ListView.cs b/src/lib/MBS.Web/UI/WebControls/ListView.cs index fe27c0c..b828787 100644 --- a/src/lib/MBS.Web/UI/WebControls/ListView.cs +++ b/src/lib/MBS.Web/UI/WebControls/ListView.cs @@ -113,6 +113,18 @@ public class ListView : Container private HtmlGenericControl thead = null, tbody = null; + protected override IEnumerable GetStyleClasses() + { + return [ "uwt-listview" ]; + } + protected override IReadOnlyDictionary GetStyleProperties() + { + return new Dictionary(new KeyValuePair[] + { + new KeyValuePair("height", "300px") + }); + } + protected override IList GetChildControls() { thead = new HtmlGenericControl("thead"); @@ -127,6 +139,10 @@ public class ListView : Container thead.Controls.Add(tr); tbody = new HtmlGenericControl("tbody"); + tbody.StyleProperties["height"] = "500px"; + tbody.StyleProperties["overflow"] = "scroll"; + tbody.StyleProperties["display"] = "block"; + foreach (ListViewItem lvi in Items) { HtmlGenericControl tr2 = new HtmlGenericControl("tr");