2011-04-23 35 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

相關問題