自定义Template,向其中添加新的panel
参考网站:https://www.devexpress.com/Support/Center/Example/Details/E2690
思路:
新建一个DefaultTemplate:

在新建的Template中进行自定义,在需要自定义的位置,加入PlaceHolder控件,这里加入的是XafUpdatePanel。这里以在右边加入一个XafUpdatePanel为例。
<td id="Right" width="250px" style="vertical-align: top">
<cc3:XafUpdatePanel ID="UPRight" runat="server"/>
</td>
界面如下:

为了实现能隐藏/显示Panel的功能,可以在Panel的左边加入一个分隔符。代码加入分隔符。
<td id="RS" style="width: 6px; border-bottom-style: none; border-top-style: none" class="dxsplVSeparator_<%= BaseXafPage.CurrentTheme %> dxsplPane_<%=BaseXafPage.CurrentTheme %>">
<div id="RSB" class="dxsplVSeparatorButton_<%=BaseXafPage.CurrentTheme%>" onmouseover="OnMouseEnter('RSB')" onmouseout="OnMouseLeave('RSB')" onclick="OnClick('Right','RSI')">
<div id="RSI" style="width: 8px;" class="dxWeb_splVCollapseForwardButton_<%=BaseXafPage.CurrentTheme %>">
</div>
</div>
</td>
这里介绍下该段语句的简单用法,onMouseEnter()和OnMouseLeave()传入的是id号为“RSB"的div元素的id,OnClick()第一个参数记录的是要隐藏的td元素的id号,在本例中,XafUpdatePanel位于id号为"Right"的元素中,通过隐藏该元素,即可隐藏Panel。ID为”RSI"的div元素放置的时隐藏/显示符号。“〉"为dxWeb_splVCollapseForwardButton。"<"为dxWeb_spVCollapseBackwardButton。请根据分隔符的位置设置。
同理,设置左边的PlaceHolder的代码如下:
<td id="leftPanel" width="250px" style="vertical-align: top">
<cc3:XafUpdatePanel ID="UPLeft" runat="server"/>
</td>
4 <td id="RL" style="width: 6px; border-bottom-style: none; border-top-style: none"
class="dxsplVSeparator_<%= BaseXafPage.CurrentTheme %> dxsplPane_<%= BaseXafPage.CurrentTheme %>">
<div id="RLT" class="dxsplVSeparatorButton_<%= BaseXafPage.CurrentTheme %>" onmouseover="OnMouseEnter('RLT')"
onmouseout="OnMouseLeave('RLT')" onclick="OnClick('leftPanel', 'RLI',true)">
<div id="RLI" style="width: 8px;" class="dxWeb_splVCollapseBackwardButton_<%= BaseXafPage.CurrentTheme %>">
</div>
</div>
</td>
完成Template的自定义工作后,要通过属性将新添加的XafUpdatePanel暴露出来。在CustomMainGISTemplate.ascx.cs中的类中添加代码如下:
#region Expose DefineControls
public System.Web.UI.Control RightPlaceHolder
{
get { return UPRight; }
}
public System.Web.UI.Control LeftPlaceHodler
{
get { return UPLeft; }
}
#endregion
注意,ASP.NET与WinForm在引用自定义模板的时候,有些许区别。在应用程序初始化时,默认页面就是Default.aspx。模板页(.ascx)是通过嵌入到Default.aspx中来实现的。因此,外部方法一般得通过Default.aspx文件的访问来获取customTemplate.ascx中的控件。这一点得注意。
接下来就是要定义一个外部访问接口,供XAF自动调用。
public interface InterfaceCustomGISTemplate:IFrameTemplate
{
Control RightPlaceHolder { get; }
Control LeftPlaceHodler { get; }
}
因为上一段讨论的原因,需要在Default.aspx.cs文件中,实现该接口,才可以让其它方法访问自定义的XafUpdatePanel。从而实现初始化等工作。
public partial class Default : BaseXafPage,InterfaceCustomGISTemplate
{
//......
#region Expose CustomControl
public Control RightPlaceHolder
{
get { return TemplateContent is customMainGISTemplate ? ((customMainGISTemplate)TemplateContent).RightPlaceHolder : null; }
}
public Control LeftPlaceHodler
{
get { return TemplateContent is customMainGISTemplate ? ((customMainGISTemplate)TemplateContent).LeftPlaceHodler : null; }
}
#endregion
}
接下来,就可以通过实现一个controller来完成在对应的XafUpdatePanel上添加控件并初始化等操作。XAF提供了一个CustomizeTemplateViewControllerBase<T>类,以帮助用户完成对自定义模板的初始化工作。用户只需继承该基类,并实现对应的接口即可。
具体代码如下:
public partial class GISInfoController : CustomizeTemplateViewControllerBase<InterfaceCustomGISTemplate>
{
//......
protected override void AddControlsToTemplateCore(InterfaceCustomGISTemplate template)
{
Control rightPlaceHolder = template.RightPlaceHolder;
if (rightPlaceHolder == null) return;
this.rightPanel = CreatePanel("rightPanel","InformationPanel");
licMsg = new LiteralControl("Used to show information or other related operation");
this.rightPanel.Controls.Add(licMsg);
rightPlaceHolder.Controls.Add(rightPanel); Control leftPlaceHolder = template.LeftPlaceHodler;
if (leftPlaceHolder == null) return;
this.leftPanel = CreatePanel("leftPanel", "DeviceSelectPanel");
mainTV = new DevExpress.Web.ASPxTreeView.ASPxTreeView();
mainTV.Nodes.Add("Add node");
leftPanel.Controls.Add(mainTV);
leftPlaceHolder.Controls.Add(leftPanel); } protected override void RemoveControlsFromTemplateCore(InterfaceCustomGISTemplate template)
{
Control rightPlaceHolder = template.RightPlaceHolder;
if (rightPlaceHolder == null) return;
rightPlaceHolder.Controls.Remove(rightPanel);
rightPanel = null;
licMsg = null; Control leftPlaceHolder = template.LeftPlaceHodler;
if (leftPlaceHolder == null) return;
leftPlaceHolder.Controls.Remove(leftPanel);
leftPanel = null;
mainTV = null;
} protected override void UpdateControls(View view)
{
licMsg.Text = licMsg.Text+string.Format("\nCurrent View Caption is:{0}", view.Caption);
} protected override void UpdateControls(object currentObject)
{ } }
最后,就是要把当前使用的默认模板替换成当前模板,具体在Global.asax中完成。
public class Global : System.Web.HttpApplication
{
//......
protected void Session_Start(Object sender, EventArgs e)
{
WebApplication.SetInstance(Session, new RMFSystemAspNetApplication());
WebApplication.Instance.Settings.DefaultVerticalTemplateContentPath = "Template/customMainGISTemplate.ascx";
//...... WebApplication.Instance.Setup();
WebApplication.Instance.Start();
}
}
生成界面如下:

自定义Template,向其中添加新的panel的更多相关文章
- Android自定义视图一:扩展现有的视图,添加新的XML属性
这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...
- Android下添加新的自定义键值和按键处理流程
Android下添加新的自定义键值和按键处理流程 说出来不怕大家笑话,我写这篇博客的原因在于前几天去一个小公司面试Android系统工程师,然后在面试的时候对方的技术总监问了我 ...
- android 添加新的键值,自定义按键-2【转】
本文转载自:http://blog.csdn.net/mr_raptor/article/details/8053871 在Android中,上层可使用的键值默认情况下是92个,从0-91:一般情况下 ...
- android 添加新的键值,自定义按键【转】
本文转载自:http://blog.csdn.net/mr_raptor/article/details/8053871 在Android中,上层可使用的键值默认情况下是92个,从0-91:一般情况下 ...
- Android下添加新的自定义键值和按键处理流程【转】
本文转载自: Android下添加新的自定义键值和按键处理流程 说出来不怕大家笑话,我写这篇博客的原因在于前几天去一个小公司面试Android系统工程师,然后在面试的时候对方的技术总监问了我一 ...
- Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接
在文章 Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接(一) 中我们成功的为/feedback/feedback_stats/路径自定义了使用tem ...
- Linux系统添加新用户
Linux系统中一般不直接使用root用户进行操作,需要添加新的用户. 首先,查看当前系统已有的用户 cat /etc/passwd 查看用户组 cat /etc/group 其次,添加想要的用户组和 ...
- 【译】Meteor 新手教程:在排行榜上添加新特性
原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...
- magento -- 添加新产品时状态默认为激活,库存状态默认为有库存
添加新产品时状态默认为激活 打开文件/app/code/core/Mage/Catalog/Model/Product/Status.php,注释掉“Please Select” /** * Retr ...
随机推荐
- [转]深入理解Flash Player重绘
这个是tencent flash team的一篇文章,但团队的博客已经关闭了,所以就在这里备份下吧~ 后来有人把这篇文章又发布到9ria上了,引发了一些讨论,其中有两位大神发言了,内容在原文下方. 9 ...
- PPTP模式跟L2TP模式有什么不同
使用VPN的时候经常会看到商家说支持PPTP模式和L2TP模式,但是许多朋友都不知道有什么区别,该用哪一个,下面给你们讲讲: 1).PPTP协议是点对点隧道协议:其将控制包与数据包分开,控制包采用TC ...
- 实验室 Linux 集群的管理常用命令
实验室有一个Linux集群,本文做一下记录. SSH相关命令 通过SSH登录集群中的其他机器上的操作系统(或虚拟机中的操作系统).操作系统之间已经设置免密码登录. 1. 无选项参数运行 SSH 通常使 ...
- HBase 系统架构
HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列的存储模型.它存储的是 ...
- 【转】Github轻松上手6-推荐follow的牛人和值得watch的repo
转自:http://blog.sina.com.cn/s/blog_4b55f6860100zzk5.html Github作为一个social coding 网站,其作用远远超过了一个简单的VCS( ...
- JDBC用ResultSet访问大量数据时会遇到的问题
我们经常需要JDBC来对数据库就行操作,一般流程为连接数据库.通过sql语句把需要的数据取出来保存到ResultSet,然后调用ResultSet方法的类似 getString,getInt()等方法 ...
- C# 使用NPlot绘图技巧
原文 C# 使用NPlot绘图技巧 图表控件一直是很难找的,特别是免费又强大的.NPlot是一款非常难得的.Net平台下的图表控件,能做各种曲线图,柱状图,饼图,散点图,股票图等,而且它免费又开源,使 ...
- 职业操盘手内部教材 z
重 点抢筹区: 是主力机构在低位拉高建仓后的一个相当尴尬的区域!因为在这个区域,场外的绝大多数投资者不敢买,而场内持有的人却很想卖!所以会出现成片的卖盘挂单! 由于主力向上做的意图已经非常明显,所 ...
- Java 与无符号那些事儿
最近在使用 Java 作为 WebSocket 客户端连接 Node.js 的 WebSocket 服务器的时候,由于使用的客户端库比较老,所以遇到了字节符号的问题,上网查了一下,看到这篇文章写的很有 ...
- [转]Linux的tail 与head 命令
转自:http://blog.csdn.net/carolzhang8406/article/details/6112707 head命令是用来查看具体文件的前面几行的内容,具体格式如下: head ...