Пример #1
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            //<a2-pager :source = "Parent.pager" />
            var pager = new TagBuilder("a2-pager", null, IsInGrid);

            if (Style != PagerStyle.Default)
            {
                pager.AddCssClass(Style.ToString().ToLowerInvariant());
            }
            pager.AddCssClass(CssClass);
            MergeAttributes(pager, context, MergeAttrMode.Margin);
            onRender?.Invoke(pager);
            var source = GetBinding(nameof(Source));

            if (source == null)
            {
                throw new XamlException("Pager has no Source binding");
            }
            pager.MergeAttribute(":source", source.GetPath(context));
            MergeBindingAttributeString(pager, context, "empty-text", nameof(EmptyText), EmptyText);
            MergeBindingAttributeString(pager, context, "template-text", nameof(TemplateText), TemplateText);
            pager.Render(context, TagRenderMode.Normal);
        }
Пример #2
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var tb = new TagBuilder("div", "toolbar", IsInGrid);

            onRender?.Invoke(tb);
            if (Style != ToolbarStyle.Default)
            {
                tb.AddCssClass(Style.ToString().ToKebabCase());
            }
            if (AlignItems != AlignItems.Default)
            {
                tb.AddCssClass("align-" + AlignItems.ToString().ToLowerInvariant());
            }
            MergeAttributes(tb, context);
            if (Border != ToolbarBorderStyle.None)
            {
                tb.AddCssClass("tb-border-" + Border.ToString().ToKebabCase());
            }
            tb.RenderStart(context);
            RenderChildren(context);
            tb.RenderEnd(context);
        }
Пример #3
0
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var tr = new TagBuilder("tr");

            onRender?.Invoke(tr);
            MergeAttributes(tr, context);
            if (Style != RowStyle.Default)
            {
                tr.AddCssClass("row-" + Style.ToString().ToKebabCase());
            }
            if (Align != null)
            {
                tr.AddCssClass("text-" + Align.ToString().ToLowerInvariant());
            }
            tr.RenderStart(context);
            foreach (var c in Cells)
            {
                c.RenderElement(context);
            }
            tr.RenderEnd(context);
        }
Пример #4
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var cont = new TagBuilder("tree-view", null, IsInGrid);

            MergeAttributes(cont, context);

            if (Height != null)
            {
                cont.MergeStyle("height", Height.Value);
            }
            if (Style != TreeViewStyle.Normal)
            {
                cont.AddCssClass($"tree-view-{Style.ToString().ToKebabCase()}");
            }
            if (Indent != null && Indent.Value == false)
            {
                cont.AddCssClass("no-indent");
            }

            var isBind = GetBinding(nameof(ItemsSource));

            if (isBind != null)
            {
                cont.MergeAttribute(":items", isBind.GetPath(context));
                cont.MergeAttribute(":expand", "$expand");                 // in BaseController
                if (Children.Count != 1)
                {
                    throw new XamlException("Only one TreeViewItem element is allowed for dynamic TreeView");
                }
                var ch = Children[0];
                cont.MergeAttribute(":options", GetOptions(context, ch));
            }
            if (AutoSelect != AutoSelectMode.None)
            {
                cont.MergeAttribute("auto-select", AutoSelect.ToString().ToKebabCase());
            }
            if (ExpandFirstItem)
            {
                cont.MergeAttribute(":expand-first-item", "true");
            }

            var dblClickBind = GetBindingCommand(nameof(DoubleClick));

            if (dblClickBind != null)
            {
                // Function!
                cont.MergeAttribute(":doubleclick", "() => " + dblClickBind.GetCommand(context));
            }

            cont.RenderStart(context);
            cont.RenderEnd(context);
        }
Пример #5
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var panel = new TagBuilder("a2-panel", null, IsInGrid);

            MergeBindingAttributeBool(panel, context, ":initial-collapsed", nameof(Collapsed), Collapsed);
            MergeBindingAttributeBool(panel, context, ":collapsible", nameof(Collapsible), Collapsible);
            if (!String.IsNullOrEmpty(TestId) && context.IsDebugConfiguration)
            {
                panel.MergeAttribute("test-id", TestId);
            }
            panel.AddCssClassBool(Compact, "compact");
            if (!HasHeader)
            {
                panel.MergeAttribute(":no-header", "true");
            }
            var sb = GetBinding(nameof(Style));

            if (sb != null)
            {
                panel.MergeAttribute(":panel-style", sb.GetPathFormat(context));
            }
            else if (Style != PaneStyle.Default)
            {
                panel.MergeAttribute("panel-style", Style.ToString().ToLowerInvariant());
            }
            MergeAttributes(panel, context, MergeAttrMode.Visibility);
            if (Background != BackgroundStyle.Default)
            {
                panel.AddCssClass("background-" + Background.ToString().ToKebabCase());
            }
            if (Height != null)
            {
                panel.MergeStyle("height", Height.Value);
            }
            if (DropShadow != ShadowStyle.None)
            {
                panel.AddCssClass("drop-shadow");
                panel.AddCssClass(DropShadow.ToString().ToLowerInvariant());
            }
            panel.RenderStart(context);
            RenderHeader(context);
            var content = new TagBuilder("div", "panel-content");

            MergeAttributes(content, context, MergeAttrMode.Margin | MergeAttrMode.Wrap | MergeAttrMode.Tip);
            content.RenderStart(context);
            RenderChildren(context);
            content.RenderEnd(context);
            panel.RenderEnd(context);
        }
Пример #6
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var tr = new TagBuilder("tr");

            onRender?.Invoke(tr);
            MergeAttributes(tr, context);

            var markBind = GetBinding(nameof(Mark));

            if (markBind != null)
            {
                if (GetBinding(nameof(Bold)) != null)
                {
                    throw new XamlException("The Bold and Mark bindings cannot be used at the same time");
                }
                var class2 = tr.GetAttribute(":class");
                if (!String.IsNullOrEmpty(class2))
                {
                    tr.MergeAttribute(":class", $"row.rowCssClass({markBind.GetPathFormat(context)})", replaceExisting: true);
                }
                else
                {
                    tr.MergeAttribute(":class", markBind.GetPathFormat(context));
                }
            }
            else if (Mark != MarkStyle.Default)
            {
                tr.AddCssClass(Mark.ToString().ToKebabCase());
            }

            if (Style != RowStyle.Default)
            {
                tr.AddCssClass("row-" + Style.ToString().ToKebabCase());
            }
            if (Align != null)
            {
                tr.AddCssClass("text-" + Align.ToString().ToLowerInvariant());
            }
            tr.RenderStart(context);
            foreach (var c in Cells)
            {
                c.RenderElement(context);
            }
            tr.RenderEnd(context);
        }
Пример #7
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var tag = new TagBuilder("div", "a2-alert", IsInGrid);

            tag.MergeAttribute("role", "alert");
            MergeAttributes(tag, context);
            var bindStyle = GetBinding(nameof(Style));

            if (bindStyle != null)
            {
                tag.MergeAttribute(":class", bindStyle.GetPath(context));
            }
            else if (Style != AlertStyle.Default)
            {
                tag.AddCssClass(Style.ToString().ToLowerInvariant());
            }
            if (DropShadow != ShadowStyle.None)
            {
                tag.AddCssClass("drop-shadow");
                tag.AddCssClass(DropShadow.ToString().ToLowerInvariant());
            }
            tag.RenderStart(context);
            RenderIcon(context, Icon);
            if (Content is UIElementBase)
            {
                (Content as UIElementBase).RenderElement(context, null);
            }
            else
            {
                var span  = new TagBuilder("span");
                var cbind = GetBinding(nameof(Content));
                if (cbind != null)
                {
                    span.MergeAttribute("v-text", cbind.GetPathFormat(context));
                }
                else if (Content != null)
                {
                    span.SetInnerText(Content.ToString());
                }
                span.Render(context);
            }
            tag.RenderEnd(context);
        }
Пример #8
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var panel = new TagBuilder("div", "a2-state-card", IsInGrid);

            onRender?.Invoke(panel);
            MergeAttributes(panel, context);
            if (MinWidth != null)
            {
                panel.MergeStyleUnit("min-width", MinWidth.Value);
            }

            if (DropShadow != ShadowStyle.None)
            {
                panel.AddCssClass("drop-shadow");
                panel.AddCssClass(DropShadow.ToString().ToLowerInvariant());
            }
            if (Style != CardStyle.Default)
            {
                panel.AddCssClass("a2-state-card-styled");
                panel.AddCssClass("a2-state-card-" + Style.ToString().ToLowerInvariant());
            }
            panel.AddCssClassBool(Compact, "compact");
            panel.RenderStart(context);
            if (HasHeader)
            {
                RenderHeader(context);
            }
            if (HasText)
            {
                RenderText(context);
            }
            if (HasFooter)
            {
                RenderFooter(context);
            }
            RenderIcon(context, Icon, "a2-card-icon");
            RenderContent(context);
            panel.RenderEnd(context);
        }
Пример #9
0
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var tag = new TagBuilder("a2-period-picker", null, IsInGrid);

            onRender?.Invoke(tag);
            if (Style != PeriodPickerStyle.Default)
            {
                tag.AddCssClass($"pp-{Style.ToString().ToLowerInvariant()}");
            }
            if (Size != ControlSize.Default)
            {
                tag.AddCssClass($"pp-{Size.ToString().ToLowerInvariant()}");
            }
            if (ShowAllData != null)
            {
                tag.MergeAttribute(":show-all", ShowAllData.ToString().ToLowerInvariant());
            }
            if (Display != DisplayMode.Date)
            {
                tag.MergeAttribute("display", Display.ToString().ToLowerInvariant());
            }
            MergeAttributes(tag, context);
            MergeDisabled(tag, context);
            MergeAlign(tag, context, Align);
            MergeValue(tag, context);
            if (Placement != DatePickerDropDownPlacement.BottomLeft)
            {
                tag.AddCssClass("drop-" + Placement.ToString().ToKebabCase());
            }
            tag.RenderStart(context);
            RenderAddOns(context);
            tag.RenderEnd(context);
        }
Пример #10
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            Boolean bHasDropDown = DropDown != null;

            if (bHasDropDown)
            {
                DropDownDirection?dir     = (DropDown as DropDownMenu)?.Direction;
                Boolean           bDropUp = (dir == DropDownDirection.UpLeft) || (dir == DropDownDirection.UpRight);
                var wrap = new TagBuilder("div", "dropdown hlink-dd-wrapper", IsInGrid)
                           .AddCssClass(bDropUp ? "dir-up" : "dir-down")
                           .MergeAttribute("v-dropdown", String.Empty);
                onRender?.Invoke(wrap);
                if (!Block)
                {
                    wrap.AddCssClass("a2-inline");
                }
                if (Style != HyperlinkStyle.Default)
                {
                    wrap.AddCssClass(Style.ToString().ToLowerInvariant());
                }
                MergeAttributes(wrap, context, MergeAttrMode.Visibility);
                wrap.RenderStart(context);
                var hasAddOn = wrap.HasClass("add-on");
                RenderHyperlink(context, false, null, inside: true, addOn: hasAddOn);
                DropDown.RenderElement(context);
                wrap.RenderEnd(context);
            }
            else
            {
                RenderHyperlink(context, IsInGrid, onRender, false);
            }
        }
Пример #11
0
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (CheckDisabledModel(context))
            {
                return;
            }
            var combo = new TagBuilder("select", null, IsInGrid);

            onRender?.Invoke(combo);
            combo.MergeAttribute("is", "combobox");
            combo.MergeAttribute("v-cloak", String.Empty);
            combo.MergeAttribute("display", DisplayProperty);
            if (Style != ComboBoxStyle.Default)
            {
                combo.AddCssClass($"combo-{Style.ToString().ToLowerInvariant()}");
            }
            MergeAttributes(combo, context);
            MergeAlign(combo, context, Align);
            MergeBoolAttribute(combo, context, nameof(ShowValue), ShowValue);
            if (Size != ControlSize.Default)
            {
                combo.AddCssClass($"cb-{Size.ToString().ToLowerInvariant()}");
            }
            MergeDisabled(combo, context);
            var isBind = GetBinding(nameof(ItemsSource));

            if (isBind != null)
            {
                combo.MergeAttribute(":items-source", isBind.GetPath(context));
                if (_children != null)
                {
                    if (Children.Count != 1)
                    {
                        throw new XamlException("The ComboBox with the specified ItemsSource must have only one ComboBoxItem element");
                    }
                    var elem     = Children[0];
                    var contBind = elem.GetBinding("Content");
                    if (contBind == null)
                    {
                        throw new XamlException("ComboBoxItem. Content binging must be specified");
                    }
                    combo.MergeAttribute(":name-prop", $"'{contBind.Path}'");                     /*without context!*/
                    var valBind = elem.GetBinding("Value");
                    if (valBind == null)
                    {
                        throw new XamlException("ComboBoxItem. Value binging must be specified");
                    }
                    combo.MergeAttribute(":value-prop", $"'{valBind.Path}'");                      /*without context!*/
                }
            }
            MergeValue(combo, context);
            combo.RenderStart(context);
            if (_children != null && isBind == null)
            {
                foreach (var ch in Children)
                {
                    ch.RenderElement(context);
                }
            }
            RenderPopover(context);
            RenderHint(context);
            RenderLink(context);
            combo.RenderEnd(context);
        }
Пример #12
0
        void RenderButton(RenderContext context, Boolean hasDropDown, Boolean bDropUp, Action <TagBuilder> onRender)
        {
            var     parentCB   = IsParentCommandBar;
            var     parentTB   = IsParentToolBar;
            Boolean hasCommand = GetBindingCommand(nameof(Command)) != null;
            Boolean insideBar  = IsParentToolBar || IsParentCommandBar;
            var     button     = new TagBuilder("button", "btn", IsInGrid);

            onRender?.Invoke(button);
            if (!Block && !insideBar)
            {
                button.AddCssClass("a2-inline");
            }
            if (Parent is Toolbar && Style == ButtonStyle.Default)
            {
                button.AddCssClass("btn-tb");
            }
            else if (IsParentCommandBar)
            {
                button.AddCssClass("btn-cb");
            }
            AddSize(button);
            if (IconAlign == IconAlign.Top)
            {
                button.AddCssClass("icon-top");
            }

            //if (!insideBar)
            if (Style != ButtonStyle.Default)
            {
                button.AddCssClass($"btn-{Style.ToString().ToLowerInvariant()}");
            }
            button.AddCssClassBool(Rounded, "btn-rounded");
            if (hasDropDown && !hasCommand)
            {
                button.MergeAttribute("toggle", String.Empty);
            }
            MergeAttributes(button, context, MergeAttrMode.NoTabIndex);             // dinamic
            if (TabIndex != 0)
            {
                button.MergeAttribute("tabindex", TabIndex.ToString());
            }
            if (!HasContent && (Icon != Icon.NoIcon))
            {
                button.AddCssClass("btn-icon");
            }
            MergeDisabled(button, context, nativeControl: true);
            button.MergeAttribute("v-settabindex", String.Empty);
            button.RenderStart(context);
            RenderIcon(context, Icon);
            RenderContent(context);
            if (hasDropDown)
            {
                if (!hasCommand)
                {
                    RenderCaret(context, bDropUp);
                }
            }
            button.RenderEnd(context);
            if (hasDropDown && hasCommand)
            {
                var open = new TagBuilder("button", "btn btn-caret")
                           .MergeAttribute("toggle", String.Empty);
                if (Style != ButtonStyle.Default)
                {
                    open.AddCssClass($"btn-{Style.ToString().ToLowerInvariant()}");
                }
                MergeVisibilityAttribures(open, context);                 // Visible only
                AddSize(open);
                open.RenderStart(context);
                RenderCaret(context, bDropUp);
                open.RenderEnd(context);
            }
        }
Пример #13
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var dataGrid = new TagBuilder("data-grid", null, IsInGrid);

            onRender?.Invoke(dataGrid);
            MergeBindingAttributeBool(dataGrid, context, ":compact", nameof(Compact), Compact);
            MergeAttributes(dataGrid, context, MergeAttrMode.Margin | MergeAttrMode.Visibility);
            dataGrid.MergeAttribute("key", Guid.NewGuid().ToString());             // disable vue reusing
            if (Height != null)
            {
                dataGrid.MergeStyle("height", Height.Value);
            }
            if (FixedHeader)
            {
                dataGrid.MergeAttribute(":fixed-header", "true");
            }
            if (HeadersVisibility == HeadersVisibility.None)
            {
                dataGrid.MergeAttribute(":hide-header", "true");
            }
            if (Style != DataGridStyle.Default)
            {
                dataGrid.AddCssClass($"data-grid-{Style.ToString().ToKebabCase()}");
            }

            if (Background != BackgroundStyle.Default)
            {
                dataGrid.AddCssClass("background-" + Background.ToString().ToKebabCase());
            }

            if (RowDetails != null)
            {
                dataGrid.MergeAttribute(":row-details", "true");
                dataGrid.MergeAttribute("row-details-activate", RowDetails.Activate.ToString().ToLowerInvariant());
                var vBind = RowDetails.GetBinding("Visible");
                if (vBind != null)
                {
                    dataGrid.MergeAttribute("row-details-visible", vBind.Path /*!without context!*/);
                }
            }
            var isb = GetBinding(nameof(ItemsSource));

            if (isb != null)
            {
                dataGrid.MergeAttribute(":items-source", isb.GetPath(context));
            }
            MergeBoolAttributeIfExists(dataGrid, context, nameof(Hover), Hover);
            MergeBoolAttributeIfExists(dataGrid, context, nameof(Striped), Striped);
            MergeBoolAttribute(dataGrid, context, nameof(Border), Border);
            MergeBoolAttribute(dataGrid, context, nameof(Sort), Sort);
            dataGrid.MergeAttribute(":route-query", "$query");             // always!
            if (!String.IsNullOrEmpty(EmptyPanelDelegate))
            {
                dataGrid.MergeAttribute(":empty-panel-callback", $"$delegate('{EmptyPanelDelegate}')");
            }


            var dblClickBind = GetBindingCommand(nameof(DoubleClick));

            if (dblClickBind != null)
            {
                // Function!
                dataGrid.MergeAttribute(":doubleclick", "() => " + dblClickBind.GetCommand(context));
            }

            if (MarkerStyle != RowMarkerStyle.None)
            {
                dataGrid.MergeAttribute("mark-style", MarkerStyle.ToString().ToKebabCase());
            }

            var mbind = GetBinding(nameof(Mark));

            if (mbind != null)
            {
                dataGrid.MergeAttribute("mark", mbind.Path);                 // without context!!!
            }
            else if (Mark != MarkStyle.Default)
            {
                throw new XamlException("The Mark property must be a binding");
            }
            var rbbind = GetBinding(nameof(RowBold));

            if (rbbind != null)
            {
                dataGrid.MergeAttribute("row-bold", rbbind.GetPath(context));
            }
            else if (RowBold != null)
            {
                throw new XamlException("The RowBold property must be a binding");
            }

            // TODO: binding for GridLines ???
            if (GridLines != GridLinesVisibility.None)
            {
                dataGrid.MergeAttribute("grid", GridLines.ToString());
            }

            var groupByBind = GetBinding(nameof(GroupBy));

            if (groupByBind != null)
            {
                dataGrid.MergeAttribute(":group-by", groupByBind.GetPath(context));
            }
            else if (_groupBy != null)
            {
                dataGrid.MergeAttribute(":group-by", _groupBy.GetJsValue(context));
            }

            if (AutoSelect != AutoSelectMode.None)
            {
                dataGrid.MergeAttribute("auto-select", AutoSelect.ToString().ToKebabCase());
            }

            dataGrid.RenderStart(context);
            Int32 colIndex = 0;

            foreach (var col in Columns)
            {
                col.RenderColumn(context, colIndex);
                colIndex++;
            }
            RenderRowDetails(context);
            RenderEmptyPanel(context);
            RenderFooter(context);
            dataGrid.RenderEnd(context);
        }
Пример #14
0
        void RenderButton(RenderContext context, Boolean hasDropDown, Boolean bDropUp, Action <TagBuilder> onRender)
        {
            Boolean hasCommand = GetBindingCommand(nameof(Command)) != null;
            Boolean insideBar  = Parent is Toolbar || Parent is CommandBar;
            var     button     = new TagBuilder("button", "btn", IsInGrid);

            onRender?.Invoke(button);
            if (!Block && !insideBar)
            {
                button.AddCssClass("a2-inline");
            }
            if (Parent is Toolbar && Style == ButtonStyle.Default)
            {
                button.AddCssClass("btn-tb");
            }
            else if (Parent is CommandBar)
            {
                button.AddCssClass("btn-cb");
            }
            switch (Size)
            {
            case ControlSize.Large:
                button.AddCssClass("lg");
                break;

            case ControlSize.Small:
                button.AddCssClass("sm");
                break;

            case ControlSize.Mini:
                button.AddCssClass("xs");
                break;
            }
            if (IconAlign == IconAlign.Top)
            {
                button.AddCssClass("icon-top");
            }

            //if (!insideBar)
            if (Style != ButtonStyle.Default)
            {
                button.AddCssClass($"btn-{Style.ToString().ToLowerInvariant()}");
            }
            if (hasDropDown && !hasCommand)
            {
                button.MergeAttribute("toggle", String.Empty);
            }
            MergeAttributes(button, context, MergeAttrMode.NoTabIndex);             // dinamic
            if (TabIndex != 0)
            {
                button.MergeAttribute("tabindex", TabIndex.ToString());
            }
            if (!HasContent && (Icon != Icon.NoIcon))
            {
                button.AddCssClass("btn-icon");
            }
            MergeDisabled(button, context, nativeControl: true);
            button.MergeAttribute("v-settabindex", String.Empty);
            button.RenderStart(context);
            RenderIcon(context, Icon);
            RenderContent(context);
            if (hasDropDown)
            {
                if (!hasCommand)
                {
                    RenderCaret(context, bDropUp);
                }
            }
            button.RenderEnd(context);
            if (hasDropDown && hasCommand)
            {
                var open = new TagBuilder("button", "btn btn-caret")
                           .MergeAttribute("toggle", String.Empty)
                           .RenderStart(context);
                RenderCaret(context, bDropUp);
                open.RenderEnd(context);
            }
        }
Пример #15
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var ul = new TagBuilder("a2-list", null, IsInGrid);

            onRender?.Invoke(ul);
            var isBind = GetBinding(nameof(ItemsSource));

            ul.AddCssClassBool(Striped, "striped");
            ul.AddCssClassBool(Border, "border");
            ul.AddCssClassBool(Flush, "flush");
            ul.AddCssClassBool(Compact, "compact");
            ul.MergeAttribute("group-by", GroupBy);
            if (BorderStyle != BorderStyle.None)
            {
                ul.AddCssClass($"border-{BorderStyle.ToString().ToKebabCase()}");
            }
            if (MarkerStyle != RowMarkerStyle.None)
            {
                ul.MergeAttribute("mark-style", MarkerStyle.ToString().ToKebabCase());
            }
            if (Select != null)
            {
                ul.MergeAttribute(":selectable", Select.Value.ToString().ToLowerInvariant());
            }
            ul.AddCssClass(Style.ToString().ToKebabCase());
            //ul.MergeAttribute(":command", "()=> $navigate()");

            if (Background != BackgroundStyle.Default)
            {
                ul.AddCssClass("background-" + Background.ToString().ToKebabCase());
            }

            var mbind = GetBinding(nameof(Mark));

            if (mbind != null)
            {
                ul.MergeAttribute("mark", mbind.Path /*without scope, property name*/);
            }
            else if (Mark != null)
            {
                throw new XamlException("The Mark property must be a binding");
            }

            if (isBind != null)
            {
                ul.MergeAttribute(":items-source", isBind.GetPath(context));
                ul.MergeAttribute("v-lazy", isBind.GetPath(context));
            }
            MergeAttributes(ul, context);
            if (Height != null)
            {
                ul.MergeStyle("height", Height.Value);
            }
            if (MaxHeight != null)
            {
                ul.MergeStyle("max-height", MaxHeight.Value);
            }
            if (AutoSelect != AutoSelectMode.None)
            {
                ul.MergeAttribute("auto-select", AutoSelect.ToString().ToKebabCase());
            }
            ul.RenderStart(context);
            RenderBody(context, isBind != null);
            RenderEmptyPanel(context);
            ul.RenderEnd(context);
        }
Пример #16
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (CheckDisabledModel(context))
            {
                return;
            }
            var input = new TagBuilder("a2-selector", null, IsInGrid);

            onRender?.Invoke(input);
            if (!String.IsNullOrEmpty(Delegate))
            {
                input.MergeAttribute(":fetch", $"$delegate('{Delegate}')");
            }
            if (!String.IsNullOrEmpty(SetDelegate))
            {
                input.MergeAttribute(":hitfunc", $"$delegate('{SetDelegate}')");
            }
            input.MergeAttribute("display", DisplayProperty);
            if (PanelPlacement != DropDownPlacement.BottomLeft)
            {
                input.MergeAttribute("placement", PanelPlacement.ToString().ToKebabCase());
            }
            if (Style != SelectorStyle.Default)
            {
                input.MergeAttribute("mode", Style.ToString().ToKebabCase());
            }
            if (Size != ControlSize.Default)
            {
                input.AddCssClass($"sel-{Size.ToString().ToLowerInvariant()}");
            }
            if (ListSize != null)
            {
                if (!ListSize.Width.IsEmpty)
                {
                    input.MergeAttribute("list-width", ListSize.Width.ToString());
                }
                if (!ListSize.Height.IsEmpty)
                {
                    input.MergeAttribute("list-height", ListSize.Height.ToString());
                }
            }
            if (ShowCaret.HasValue && ShowCaret.Value)
            {
                input.MergeAttribute(":caret", "true");
            }
            if (ShowClear)
            {
                input.MergeAttribute(":has-clear", "true");
            }

            var isBind = GetBinding(nameof(ItemsSource));

            if (isBind != null)
            {
                input.MergeAttribute(":items-source", isBind.GetPath(context));
            }

            MergeAttributes(input, context);
            MergeDisabled(input, context);
            MergeAlign(input, context, Align);
            MergeBindingAttributeString(input, context, "placeholder", nameof(Placeholder), Placeholder);
            MergeValue(input, context);
            MergeCustomValueItemProp(input, context, nameof(TextValue), "text");
            MergeCreateNew(input, context);

            input.RenderStart(context);
            RenderAddOns(context);
            //RenderNewPane(context);
            RenderPaneTemplate(context);
            input.RenderEnd(context);
        }