Lire en anglais

Partager via


EditableDesignerRegion Classe

Définition

Représente une zone de contenu modifiable dans le balisage au moment du design pour le contrôle associé.

C#
public class EditableDesignerRegion : System.Web.UI.Design.DesignerRegion
Héritage
EditableDesignerRegion
Dérivé

Exemples

Cet exemple montre comment créer un contrôle avec deux régions cliquables et un EditableDesignerRegion objet avec deux vues ou modèles. Compilez le projet, puis ouvrez la page dans un concepteur visuel et basculez vers la vue conception (WYSIWYG). Il existe deux affichages cliquables, View1 et View2. Cliquez sur Affichage1 et faites glisser le CheckBox contrôle de la partie inférieure de la page vers la région de concepteur vide juste en dessous des régions cliquables. Cliquez sur Affichage2 et faites glisser le RadioButton contrôle dans la région du concepteur vide. Cliquez à nouveau sur Affichage1 , puis la région avec le CheckBox réapparaît. Cliquez sur Affichage2 et sur la région avec les RadioButton réapparaîtres. Revenez à la vue source pour voir comment vos modifications sont conservées dans le balisage HTML

Note

Votre projet doit avoir une référence à l’assembly System.Design.dll.

C#
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.Design.WebControls;
using System.Web.UI.WebControls;

namespace Samples.ASPNet.ControlDesigners_CS 
{
    [
        Designer(typeof(MyMultiRegionControlDesigner)), 
        ToolboxData("<{0}:MyMultiRegionControl runat=\"server\" width=\"200\"></{0}:MyMultiRegionControl>")
    ]
    public class MyMultiRegionControl : CompositeControl
    {
        // Define the templates that represent 2 views on the control
        private ITemplate _view1;
        private ITemplate _view2;

        // Create persistable inner properties 
        // for the two editable views
        [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue(null)]
        public virtual ITemplate View1
        {
            get { return _view1; }
            set { _view1 = value; }
        }
        [PersistenceMode(PersistenceMode.InnerProperty), DefaultValue(null)]
        public virtual ITemplate View2
        {
            get { return _view2; }
            set { _view2 = value; }
        }

        // The current view on the control; 0 = view1, 1 = view2
        private int _currentView = 0;
        public int CurrentView
        {
            get { return _currentView; }
            set { _currentView = value; }
        }

        // Create a simple table with a row of two clickable, 
        // readonly headers and a row with a single column, which 
        // is the 'container' to which we'll be adding controls.
        protected override void CreateChildControls()
        {
            // Always start with a clean form
            Controls.Clear();

            // Create a table using the control's declarative properties
            Table t = new Table();
            t.CellSpacing = 1;
            t.BorderStyle = BorderStyle;
            t.Width = this.Width;
            t.Height = this.Height;

            // Create the header row
            TableRow tr = new TableRow();
            tr.HorizontalAlign = HorizontalAlign.Center;
            tr.BackColor = Color.LightBlue;

            // Create the first cell in the header row
            TableCell tc = new TableCell();
            tc.Text = "View 1";
            tc.Width = new Unit("50%");
            tr.Cells.Add(tc);

            // Create the second cell in the header row
            tc = new TableCell();
            tc.Text = "View 2";
            tc.Width = new Unit("50%");
            tr.Cells.Add(tc);

            t.Rows.Add(tr);

            // Create the second row for content
            tr = new TableRow();
            tr.HorizontalAlign = HorizontalAlign.Center;

            // This cell represents our content 'container'
            tc = new TableCell();
            tc.ColumnSpan = 2;

            // Add the current view content to the cell
            // at run-time
            if (!DesignMode)
            {
                Control containerControl = new Control();
                switch (CurrentView)
                {
                    case 0:
                        if (View1 != null)
                            View1.InstantiateIn(containerControl);
                        break;
                    case 1:
                        if (View2 != null)
                            View2.InstantiateIn(containerControl);
                        break;
                }

                tc.Controls.Add(containerControl);
            }

            tr.Cells.Add(tc);

            t.Rows.Add(tr);

            // Add the finished table to the Controls collection
            Controls.Add(t);
        }
    }

    //---------------------------------------------------------
    // Region-based control designer for the above web control, 
    // derived from CompositeControlDesigner.
    public class MyMultiRegionControlDesigner : CompositeControlDesigner 
    {
        private MyMultiRegionControl myControl;

        public override void Initialize(IComponent component)
        {
            base.Initialize(component);
            myControl = (MyMultiRegionControl)component;
        }

        // Make this control resizeable on the design surface
        public override bool AllowResize
        {
            get
            {
                return true;
            }
        }

        // Use the base to create child controls, then add region markers
        protected override void CreateChildControls() {
            base.CreateChildControls();

            // Get a reference to the table, which is the first child control
            Table t = (Table)myControl.Controls[0];

            // Add design time markers for each of the three regions
            if (t != null)
            {
                // View1
                t.Rows[0].Cells[0].Attributes[DesignerRegion.DesignerRegionAttributeName] = "0";
                // View2
                t.Rows[0].Cells[1].Attributes[DesignerRegion.DesignerRegionAttributeName] = "1";
                // Editable region
                t.Rows[1].Cells[0].Attributes[DesignerRegion.DesignerRegionAttributeName] = "2";
            }
        }

        // Handler for the Click event, which provides the region in the arguments.
        protected override void OnClick(DesignerRegionMouseEventArgs e)
        {
            if (e.Region == null)
                return;

            // If the clicked region is not a header, return
            if (e.Region.Name.IndexOf("Header") != 0)
                return;

            // Switch the current view if required
            if (e.Region.Name.Substring(6, 1) != myControl.CurrentView.ToString())
            {
                myControl.CurrentView = int.Parse(e.Region.Name.Substring(6, 1));
                base.UpdateDesignTimeHtml();
            }
        }

        // Create the regions and design-time markup. Called by the designer host.
        public override String GetDesignTimeHtml(DesignerRegionCollection regions) {
            // Create 3 regions: 2 clickable headers and an editable row
            regions.Add(new DesignerRegion(this, "Header0"));
            regions.Add(new DesignerRegion(this, "Header1"));

            // Create an editable region and add it to the regions
            EditableDesignerRegion editableRegion = 
                new EditableDesignerRegion(this, 
                    "Content" + myControl.CurrentView, false);
            regions.Add(editableRegion);

            // Set the highlight for the selected region
            regions[myControl.CurrentView].Highlight = true;

            // Use the base class to render the markup
            return base.GetDesignTimeHtml();
        }

        // Get the content string for the selected region. Called by the designer host?
        public override string GetEditableDesignerRegionContent(EditableDesignerRegion region) 
        {
            // Get a reference to the designer host
            IDesignerHost host = (IDesignerHost)Component.Site.GetService(typeof(IDesignerHost));
            if (host != null)
            {
                ITemplate template = myControl.View1;
                if (region.Name == "Content1")
                    template = myControl.View2;

                // Persist the template in the design host
                if (template != null)
                    return ControlPersister.PersistTemplate(template, host);
            }

            return String.Empty;
        }

        // Create a template from the content string and  
        // put it in the selected view.
        public override void SetEditableDesignerRegionContent(EditableDesignerRegion region, string content)
        {
            if (content == null)
                return;

            // Get a reference to the designer host
            IDesignerHost host = (IDesignerHost)Component.Site.GetService(typeof(IDesignerHost));
            if (host != null)
            {
                // Create a template from the content string
                ITemplate template = ControlParser.ParseTemplate(host, content);

                // Determine which region should get the template
                // Either 'Content0' or 'Content1'
                if (region.Name.EndsWith("0"))
                    myControl.View1 = template;
                else if (region.Name.EndsWith("1"))
                    myControl.View2 = template;
            }
        }
    }
}
ASP.NET (C#)
<%@ Page Language="C#"  %>
<%@ Register TagPrefix="aspSample" 
    Assembly="Samples.ASPNet.ControlDesigners_CS" 
    Namespace="Samples.ASPNet.ControlDesigners_CS" %>

<!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>Designers Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <aspSample:MyMultiRegionControl ID="myCtl" Runat=Server Width=200 Height=75 BorderStyle=solid >
        </aspSample:MyMultiRegionControl><br />
        <asp:CheckBox ID="CheckBox1" runat="server" />
        <asp:RadioButton ID="RadioButton1" runat="server" />

    </div>
    </form>
</body>
</html>

Remarques

Utilisez la EditableDesignerRegion classe pour vous aider à gérer les modèles au moment de la conception. A ControlDesigner utilise une instance de cette classe avec sa GetEditableDesignerRegionContent méthode pour générer le balisage HTML du contenu de la région.

Constructeurs

EditableDesignerRegion(ControlDesigner, String)

Initialise une nouvelle instance de la classe EditableDesignerRegion à l'aide du propriétaire et du nom donnés.

EditableDesignerRegion(ControlDesigner, String, Boolean)

Crée une nouvelle instance de la classe EditableDesignerRegion à l'aide du propriétaire et du nom donnés et de la valeur initiale de la propriété ServerControlsOnly.

Propriétés

Content

Obtient ou définit le balisage HTML pour le contenu de la zone.

Description

Obtient ou définit la description pour une zone du concepteur.

(Hérité de DesignerRegion)
Designer

Obtient le composant de concepteur associé.

(Hérité de DesignerObject)
DisplayName

Obtient ou définit le nom complet convivial pour une zone du concepteur.

(Hérité de DesignerRegion)
EnsureSize

Obtient ou définit une valeur indiquant si la taille de la zone doit être définie explicitement sur la zone du concepteur par l'hôte de conception.

(Hérité de DesignerRegion)
Highlight

Obtient ou définit une valeur indiquant si la zone du concepteur doit être mise en surbrillance dans l'aire de conception.

(Hérité de DesignerRegion)
Name

Obtient le nom de l'objet.

(Hérité de DesignerObject)
Properties

Obtient les propriétés de l'objet.

(Hérité de DesignerObject)
Selectable

Obtient ou définit une valeur indiquant si la zone du concepteur peut être sélectionnée par l'utilisateur dans l'aire de conception.

(Hérité de DesignerRegion)
Selected

Obtient ou définit une valeur indiquant si la zone du concepteur est actuellement sélectionnée dans l'aire de conception.

(Hérité de DesignerRegion)
ServerControlsOnly

Obtient ou définit une valeur qui indique si la zone peut accepter uniquement des contrôles serveur Web.

SupportsDataBinding

Obtient ou définit une valeur qui indique si la zone peut être liée à une source de données.

UserData

Obtient ou définit les données de l'utilisateur facultatives à associer à la zone du concepteur.

(Hérité de DesignerRegion)

Méthodes

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetBounds()

Récupère la taille de la zone du concepteur dans l'aire de conception.

(Hérité de DesignerRegion)
GetChildViewRendering(Control)

Retourne un objet ViewRendering qui contient le balisage HTML au moment du design pour le contrôle donné.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetService(Type)

Obtient un service de l'hôte de conception, tel qu'identifié par le type fourni.

(Hérité de DesignerObject)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

Implémentations d’interfaces explicites

IServiceProvider.GetService(Type)

Pour obtenir une description de ce membre, consultez GetService(Type).

(Hérité de DesignerObject)

Méthodes d’extension

GetKeyedService<T>(IServiceProvider, Object)

Obtient un service de type T à partir de IServiceProvider.

GetKeyedServices(IServiceProvider, Type, Object)

Obtient une énumération des services de type serviceType à partir de .IServiceProvider

GetKeyedServices<T>(IServiceProvider, Object)

Obtient une énumération des services de type T à partir de .IServiceProvider

GetRequiredKeyedService(IServiceProvider, Type, Object)

Obtient un service de type serviceType à partir de IServiceProvider.

GetRequiredKeyedService<T>(IServiceProvider, Object)

Obtient un service de type T à partir de IServiceProvider.

CreateAsyncScope(IServiceProvider)

Crée un AsyncServiceScope qui peut être utilisé pour résoudre des services délimités.

CreateScope(IServiceProvider)

Crée un IServiceScope qui peut être utilisé pour résoudre des services délimités.

GetRequiredService(IServiceProvider, Type)

Obtient le service de type serviceType à partir du IServiceProvider.

GetRequiredService<T>(IServiceProvider)

Obtient le service de type T à partir du IServiceProvider.

GetService<T>(IServiceProvider)

Obtient le service de type T à partir du IServiceProvider.

GetServices(IServiceProvider, Type)

Obtient une énumération des services de type serviceType à partir du IServiceProvider.

GetServices<T>(IServiceProvider)

Obtient une énumération des services de type T à partir du IServiceProvider.

GetFakeLogCollector(IServiceProvider)

Obtient l’objet qui collecte les enregistrements de journal envoyés au faux journal.

GetFakeRedactionCollector(IServiceProvider)

Obtient l’instance de collecteur de faux réacteur à partir du conteneur d’injection de dépendances.

S’applique à

Produit Versions
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Voir aussi