Display default designer with embedded controls

Posted by Community Admin on 04-Aug-2018 14:04

Display default designer with embedded controls

All Replies

Posted by Community Admin on 22-Feb-2012 00:00

I have created a wrapper around the NavigationControl so that we can have a title.  Is there any way that we can use the default designer for the NavigationControl, or any default control, whenever they are embedded into a custom user control?

I currently do not have the NavControl exposed in the code behind in the attached code.  I am just exposing the properties that we need to edit and assigning the values on the Page_Load event.   If we cannot use the default designer is there a better way to do this?


<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SiteMenuWithHeader.ascx.cs" Inherits="AkesocareWeb.UserControls.SiteMenuWithHeader" %>
<%@ Register TagPrefix="tk" Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.NavigationControls" %>
<div class="linkBox">
    <h4><asp:Label runat="server" ID="txtNavHeading"></asp:Label></h4>
    <!-- Default control settings are in the code behind. -->
    <tk:NavigationControl ID="NavControl" runat="server"
        NavigationMode="VerticalSimple"
        SelectionMode="CurrentPageSiblings"></tk:NavigationControl>
</div>

001.using System;
002.using System.Collections.Generic;
003.using System.Linq;
004.using System.Web;
005.using System.Web.UI.WebControls;
006.using System.ComponentModel;
007.using Telerik.Sitefinity;
008.using Telerik.Sitefinity.Web;
009.using Telerik.Sitefinity.Web.UI;
010.using Telerik.Sitefinity.Web.UI.NavigationControls;
011. 
012.namespace AkesocareWeb.UserControls
013.
014.    public partial class SiteMenuWithHeader : System.Web.UI.UserControl
015.    
016. 
017.        #region Fields
018. 
019.        private PageSiteNode currentNode;
020.        private PageSiteNode parentNode;
021. 
022.        private int? defaultMaxBindDepth = 1;
023.        private bool? defaultShowParentPage = false;
024.        private string defaultCssClass = "RadMenu_navigationsection";
025.        private string defaultSkin = "navigationsection";
026. 
027.        #endregion
028. 
029.        #region Properties
030. 
031.        private PageSiteNode ParentNode
032.        
033.            get
034.            
035.                if (this.parentNode == null) GetParentNode();
036.                return this.parentNode;
037.            
038.        
039. 
040.        private PageSiteNode CurrentNode
041.        
042.            get
043.            
044.                if (this.currentNode == null) GetCurrentNode();
045.                return this.currentNode;
046.            
047.        
048. 
049.        public int? SiteMenu_MaxBindDepth
050.        
051.            get return this.defaultMaxBindDepth;
052.            set
053.            
054.                if (value != null)
055.                    this.defaultMaxBindDepth = value;
056.            
057.        
058. 
059.        public bool? SiteMenu_ShowParentPage
060.        
061.            get return this.defaultShowParentPage;
062.            set
063.            
064.                if (value != null)
065.                    this.defaultShowParentPage = value;
066.            
067.        
068. 
069.        public string SiteMenu_CssClass
070.        
071.            get return this.defaultCssClass;
072.            set
073.            
074.                if (value != null)
075.                    this.defaultCssClass = value;
076.            
077.        
078. 
079.        public string SiteMenu_Skin
080.        
081.            get return this.defaultSkin;
082.            set
083.            
084.                if (value != null)
085.                    this.defaultSkin = value;
086.            
087.        
088. 
089.        public string SiteMenu_Heading get; set;
090.         
091.        #endregion
092. 
093.        #region Events
094. 
095.        protected void Page_Load(object sender, EventArgs e)
096.        
097.            SetMenuHeading();
098.            this.NavControl.CssClass = defaultCssClass;
099.            this.NavControl.Skin = defaultSkin;
100.            this.NavControl.ShowParentPage = (bool)defaultShowParentPage;
101.            this.NavControl.MaxDataBindDepth = (int)defaultMaxBindDepth;
102.        
103. 
104.        #endregion
105. 
106.        #region Methods
107. 
108. 
109.        #region Private Methods
110. 
111.        private void SetMenuHeading()
112.        
113.            if (!string.IsNullOrEmpty(this.SiteMenu_Heading))
114.            
115.                this.txtNavHeading.Text = SiteMenu_Heading;
116.            
117.            else
118.            
119.                if (this.ParentNode != null)
120.                    SetGroupTitle();
121.                else
122.                    SetPageTitle();
123.            
124.        
125. 
126.        private void GetCurrentNode()
127.        
128.            this.currentNode = Telerik.Sitefinity.Web.SiteMapBase.GetActualCurrentNode();
129.        
130. 
131.        private void GetParentNode()
132.        
133.            var currentNode = this.CurrentNode;
134.            PageSiteNode parentNode = null;
135.            if (currentNode != null)
136.                parentNode = currentNode.ParentNode as PageSiteNode;
137.            this.parentNode = (parentNode != null && parentNode.ParentKey != null) ?
138.                parentNode : null;
139.        
140. 
141.        private void SetPageTitle()
142.        
143.            if (this.CurrentNode == null) return;
144.            this.txtNavHeading.Text = this.CurrentNode.Title;
145.        
146. 
147.        private void SetGroupTitle()
148.        
149.            if (this.ParentNode == null) return;
150.            if (this.ParentNode.NodeType == Telerik.Sitefinity.Pages.Model.NodeType.Group)
151.                this.txtNavHeading.Text = this.ParentNode.Title;
152.        
153. 
154.        private bool IsCurrentNode(PageSiteNode node)
155.        
156.            //Current node can be null when in design mode
157.            var currentNode = this.CurrentNode;
158.            bool result = false;
159.            if (currentNode != null)
160.                result = (node.PageId == this.CurrentNode.PageId);
161.            return result;
162.        
163. 
164. 
165.        #endregion
166. 
167. 
168.        #region Public Methods
169. 
170. 
171.        #endregion
172. 
173. 
174.        #endregion
175.    
176.

Posted by Community Admin on 27-Feb-2012 00:00

Hi,

 You can use the navigation widget designer. To do this craete a class and inherit from Telerik.Sitefinity.Web.UI.NavigationControls.NavigationControl .
Register the class as a new user control. Go to Administration->Settings->Advanced->Toolboxes->Toolboxes->PageControls->Sections->NavigationSections->Tools and register the control as 
ControlType: SitefinityWebApp.Class1 (namespace.classname of the newly created class)
Name: Class1
Title: CustomNavigation

To add the lable use a modified template for the navigation control where you can add the label.
The default template is:

<%@ Control Language="C#" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI" TagPrefix="sf" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.NavigationControls.SiteMapNavigations" TagPrefix="navcontrols" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
 
 
 
<sf:ConditionalTemplateContainer ID="conditionalTemplate" runat="server">
    <Templates>
        <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="HorizontalSimple" runat="server">
             <navcontrols:SiteMapNavigationTabStrip ID="siteMapControl_horizontalsimple" runat="server" Skin="Sitefinity">
             </navcontrols:SiteMapNavigationTabStrip>
        </sf:ConditionalTemplate>
        <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="HorizontalDropDownMenu" runat="server">
            <navcontrols:SiteMapNavigationMenu ID="siteMapControl_horizontaldropdownmenu" runat="server"  Skin="Sitefinity" />
        </sf:ConditionalTemplate>
        <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="HorizontalTabs" runat="server">
           <navcontrols:SiteMapNavigationTabStrip ID="siteMapControl_horizontaltabs" runat="server" Skin="Sitefinity">
             </navcontrols:SiteMapNavigationTabStrip>
        </sf:ConditionalTemplate>
        <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="VerticalSimple" runat="server">
            <navcontrols:SiteMapNavigationTabStrip ID="siteMapControl_verticalsimple" runat="server" Orientation="VerticalLeft" MaxDataBindDepth="1" Skin="Sitefinity">
             </navcontrols:SiteMapNavigationTabStrip>
        </sf:ConditionalTemplate>
        <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="SiteMapInColumns" runat="server">
            <navcontrols:SitemapNavigationSiteMapControl ID="siteMapControl_sitemapincolumns" runat="server" MaxDataBindDepth="2" Skin="Sitefinity">
            <LevelSettings>
                <telerik:SiteMapLevelSetting  Level="0">
                    <ListLayout RepeatDirection="Vertical" RepeatColumns="10" />
                </telerik:SiteMapLevelSetting>
            </LevelSettings>
            </navcontrols:SitemapNavigationSiteMapControl>
        </sf:ConditionalTemplate>
        <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="SiteMapInRows" runat="server">
            <navcontrols:SitemapNavigationSiteMapControl ID="siteMapControl_sitemapinrows" runat="server" MaxDataBindDepth="2" Skin="Sitefinity">
             <LevelSettings>
                <telerik:SiteMapLevelSetting>
                    <ListLayout RepeatColumns="1" AlignRows="true" />
                </telerik:SiteMapLevelSetting>
                <telerik:SiteMapLevelSetting Layout="Flow" SeparatorText="┊" />
            </LevelSettings>
            </navcontrols:SitemapNavigationSiteMapControl>
        </sf:ConditionalTemplate>
        <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="CustomNavigation" runat="server">
            <telerik:RadSiteMap ID="siteMapControl_customnavigation" runat="server" Skin="Sitefinity" />
        </sf:ConditionalTemplate>
        <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="VerticalTree" runat="server">
            <navcontrols:SiteMapNavigationTreeView runat="server" id="siteMapControl_verticaltree" Skin="Sitefinity">
            </navcontrols:SiteMapNavigationTreeView>
        </sf:ConditionalTemplate>
    </Templates>
</sf:ConditionalTemplateContainer>
<script type="text/javascript">
     
 
    function radMenuOnClick(sender, args)
 
        var state = args.get_item().get_attributes().getAttribute("ExpandOnClick");
        args.get_item().get_attributes().setAttribute("ExpandOnClick", "true")
        args.get_item().open();
    
 
    function radMenuOnOpening(sender, args)
        var state = args.get_item().get_attributes().getAttribute("ExpandOnClick");
        if(state != "true")
            args.set_cancel(true);
        args.get_item().get_attributes().setAttribute("ExpandOnClick", "false")
    
</script>

In the class register the new template to be used:
public override string LayoutTemplatePath
        
            get
            
                string modeTemplate = null;
                if (string.IsNullOrWhiteSpace(modeTemplate) && string.IsNullOrWhiteSpace(this.LayoutTemplateName))
                
                    modeTemplate = NavigationControl.defaultEmbeddedLayoutTemplatePath;
                
 
                return modeTemplate;
            
            set
            
                return;
            
        
 
 
public static readonly string defaultEmbeddedLayoutTemplatePath = ("SitefinityWebApp.CustomizedTemplate.ascx");
This will require reworking the already available code to work with Sitefinity navigation control.

Kind regards,
Stanislav Velikov
the Telerik team
Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items

This thread is closed