2011-04-23 97 views
2

如何设置Ext.Net中的自定义(甚至非自定义)控件属性的初始值(一个.net包装器为extjs)?如何在Ext.Net中设置属性的初始值

目前我做了以下内容:

public class CpfField : Ext.Net.TextField { 

    public CpfField() { 
     this.SelectOnFocus = true; 
     this.AllowBlank = false; 
     this.MaxLength = 14; 
     this.FieldLabel = "CPF"; 
     this.LabelAlign = Ext.Net.LabelAlign.Top; 
     this.Plugins.Add(new CpfInputMask()); 
    } 
} 

正如你所看到的,我使用的构造方法仅设置默认值,我不重写控制的任何行为。到现在为止还挺好。它按预期工作,但我对每个继承的控件设置了this.LabelAlign = Ext.Net.LabelAlign.Top

这听起来像违反了DRY原则。有没有办法在全局范围内设置这个(和其他属性)?

回答

0

你在这里很好,但我注意到一些问题。

  1. 必须在Container级别设置.LabelAlign属性。容器也必须使用FormLayout。不幸的是,.LabelAlign在字段级别不能呈现不同的效果。
  2. 将.FieldLabel属性设置为“CPF”应该不是必需的,除非您预计所有这些“CpfField”组件都被标记为“CPF”。 .FieldLabel通常设置在字段配置级别,在标记或代码隐藏时,实例化该字段。

您可以调查的另一个“全局”选项是使用.skin文件。下面的示例通过“全局”设置所有TextField组件的属性来演示此选项。

以下示例演示了几个选项,其中包括设置对象的OnInit事件中的属性。

实施例(。皮肤)

<%@ Register assembly="Ext.Net" namespace="Ext.Net" tagprefix="ext" %> 

<ext:TextField runat="server" Icon="Accept" /> 

实施例(的.aspx)

<%@ Page Language="C#" Theme="Skin1" %> 

<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %> 

<script runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     var form = new FormPanel 
     { 
      Height = 215, 
      Width = 350, 
      Title = "Example", 
      Padding = 5, 
      DefaultAnchor = "100%", 
      Items = { 
       new MyField 
       { 
        FieldLabel = "My Field" 
       }, 
       new AnotherField 
       { 
        FieldLabel = "Another Field" 
       }, 
       new TextField 
       { 
        FieldLabel = "A TextField" 
       } 
      } 
     }; 

     this.Form.Controls.Add(form); 
    } 

    public class MyField : TextField 
    { 
     public MyField() 
     { 
      this.SelectOnFocus = true; 
      this.AllowBlank = false; 
      this.MaxLength = 14; 
     } 
    } 

    public class AnotherField : TextField 
    { 
     protected override void OnInit(EventArgs e) 
     { 
      this.SelectOnFocus = true; 
      this.AllowBlank = false; 
      this.MaxLength = 14; 

      base.OnInit(e); 
     } 
    } 
</script> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Ext.NET Example</title> 
</head> 
<body> 
    <form runat="server"> 
     <ext:ResourceManager runat="server" /> 
    </form> 
</body> 
</html> 

希望这有助于。

+0

但是如何设置LabelAlign = Container容器中的顶部并使所有的类都从它继承? – BrunoSalvino 2011-04-29 02:15:53

+0

我认为你需要提供更多信息。我不完全确定如何回答。在容器中设置LabelAlign =“Top”将导致所有内部字段类型使用LabelAlign.Top进行渲染。这是默认功能。 – 2011-05-01 18:41:25