Пример #1
0
        private void BuildBoard()
        {
            RegionContainer[] originalityContainers = new RegionContainer[5];
            var coordinatesLo = new List <System.Drawing.Point> {
                new System.Drawing.Point(0, 50), new System.Drawing.Point(34, 50), new System.Drawing.Point(67, 50)
            };
            var coordinatesUp = new List <System.Drawing.Point> {
                new System.Drawing.Point(0, 0), new System.Drawing.Point(50, 0)
            };

            for (int i = 0; i < 2; i++)
            {
                originalityContainers[i] = new RegionContainer(coordinatesUp[i].X, coordinatesUp[i].Y, 50, 50, RegionContainer.OrientationType.VERTICAL);
                originalityContainers[i].SetAcceptElement(idea);
                BoardRegion region = new BoardRegion(new Color(0, 0, 0), 0.0f, "Nazwa");
                region.PopupAttribute = "Nazwa";
                originalityContainers[i].AddRegion(region);
                matrix.Board.AddContainer(originalityContainers[i]);
            }
            for (int i = 0; i < 3; i++)
            {
                originalityContainers[i] = new RegionContainer(coordinatesLo[i].X, coordinatesLo[i].Y, 33, 50, RegionContainer.OrientationType.VERTICAL);
                originalityContainers[i].SetAcceptElement(idea);
                BoardRegion region = new BoardRegion(new Color(0, 250, 0), 0.0f, "Nazwa");
                region.PopupAttribute = "Nazwa";
                originalityContainers[i].AddRegion(region);
                matrix.Board.AddContainer(originalityContainers[i]);
            }
        }
        private void BuildBoard()
        {
            RegionContainer[] modulesContainers  = new RegionContainer[3];
            RegionContainer[] featuresContainers = new RegionContainer[3];

            int[] pos1 = { 0, 33, 67 };
            for (int i = 0; i < 3; i++)
            {
                modulesContainers[i] = new RegionContainer(0, pos1[i], 100, 8, RegionContainer.OrientationType.HORIZONTAL);
                modulesContainers[i].SetAcceptElement(module);

                BoardRegion region = new BoardRegion(new Color(0, 0, 255), 0.5f, "Nazwa");
                region.Attributes.Add(new BoardRegion.Attribute("Numer modułu", (i + 1).ToString()));
                region.PopupAttribute = "Opis";
                modulesContainers[i].AddRegion(region);
                avax.Board.AddContainer(modulesContainers[i]);
            }

            int[]         pos2    = { 8, 41, 75 };
            BoardRegion[] regions = new BoardRegion[3];
            for (int i = 0; i < 3; i++)
            {
                featuresContainers[i] = new RegionContainer(0, pos2[i], 100, i == 1 ? 26 : 25, RegionContainer.OrientationType.VERTICAL);
                featuresContainers[i].SetAcceptElement(feature);
                for (int j = 0; j < 3; j++)
                {
                    regions[j] = new BoardRegion(new Color(0, 0, 255), 0.1f * (j + 1), "Nazwa");
                    regions[j].PopupAttribute = "Opis";
                    regions[j].Attributes.Add(new BoardRegion.Attribute("Priorytet", ((EnumType)feature.GetAttribute("Priorytet").Type).Domain[j]));
                    regions[j].CalcAttributes.Add(new BoardRegion.CalcAttribute("Moduł", new ElementQuery().Select("Nazwa").From("Moduł").Where("Numer modułu").Equals((i + 1).ToString())));
                    featuresContainers[i].AddRegion(regions[j]);
                }
                avax.Board.AddContainer(featuresContainers[i]);
            }
        }
        private void BuildBoard()
        {
            RegionContainer anchorsContainer = new RegionContainer(0, 50, 100, 50, RegionContainer.OrientationType.HORIZONTAL);

            anchorsContainer.SetAcceptElement(anchor);
            BoardRegion[] regions = new BoardRegion[3];
            Color         red     = new Color(255, 0, 0);

            for (int i = 0; i < 3; i++)
            {
                regions[i] = new BoardRegion(red, 0.1f * (i + 1), "Nazwa");
                regions[i].PopupAttribute = "Opis";
                regions[i].Attributes.Add(new BoardRegion.Attribute("Głębokość", ((EnumType)anchor.GetAttribute("Głębokość").Type).Domain[i]));
                anchorsContainer.AddRegion(regions[i]);
            }
            speedBoat.Board.AddContainer(anchorsContainer);

            RegionContainer propellersContainer = new RegionContainer(0, 0, 50, 50, RegionContainer.OrientationType.HORIZONTAL);

            propellersContainer.SetAcceptElement(propeller);

            Color blue = new Color(0, 0, 255);

            for (int i = 0; i < 3; i++)
            {
                regions[i] = new BoardRegion(blue, 0.1f * (i + 1), "Nazwa");
                regions[i].PopupAttribute = "Opis";
                regions[i].Attributes.Add(new BoardRegion.Attribute("Siła", ((EnumType)propeller.GetAttribute("Siła").Type).Domain[i]));
                propellersContainer.AddRegion(regions[i]);
            }
            speedBoat.Board.AddContainer(propellersContainer);
        }
Пример #4
0
 public void SelectPrefab(RegionContainer regionContainer)
 {
     regionContainer.prefab.GetComponent <MeshCollider>().enabled = false;
     selectObject.SetObjectInfo(regionContainer);
     regionContainer.prefab.GetComponent <MeshCollider>().enabled = true;
     usingWalls   = false;
     rotationSide = 0;
 }
Пример #5
0
        protected override FrameworkElement ArrageCore(RegionContainer regions)
        {
            var components = new UIComponents(regions);

            this.LayoutControl.Arrange(components);

            return(this.LayoutControl.CastTo <FrameworkElement>());
        }
Пример #6
0
        /// <summary>
        /// 为多个控件进行布局,然后返回组合的控件。
        /// </summary>
        /// <param name="regions"></param>
        /// <returns></returns>
        public FrameworkElement Arrange(RegionContainer regions)
        {
            if (regions == null) throw new ArgumentNullException("regions");

            var result = this.ArrageCore(regions);

            return result;
        }
Пример #7
0
        /// <summary>
        /// 为多个控件进行布局,然后返回组合的控件。
        /// </summary>
        /// <param name="regions"></param>
        /// <returns></returns>
        public FrameworkElement Arrange(RegionContainer regions)
        {
            if (regions == null)
            {
                throw new ArgumentNullException("regions");
            }

            var result = this.ArrageCore(regions);

            return(result);
        }
Пример #8
0
        public void DeletePrefab(RegionContainer regionContainer)
        {
            dataBase.regions.Remove(regionContainer);
            if (selectObject.realObject.GetInstanceID() == regionContainer.prefab.GetInstanceID())
            {
                selectObject.SetToNull();
            }

            EditorUtility.SetDirty(dataBase);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
        private void BuildBoard()
        {
            var featureContainer = new RegionContainer(4, 25, 92, 71, RegionContainer.OrientationType.HORIZONTAL);

            featureContainer.SetAcceptElement(feature);
            BoardRegion r1 = new BoardRegion(new Color(255, 255, 0), 0.1f, "Nazwa");

            r1.PopupAttribute = "Opis";

            featureContainer.AddRegion(r1);
            baf.Board.AddContainer(featureContainer);
        }
Пример #10
0
        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (e.NavigationMode == NavigationMode.Back)
            {
                return;
            }
            if (e.Parameter != null && e.Parameter is RegionContainer _con)
            {
                _regionContainer = _con;
            }
            App.AppViewModel.CurrentSubPageControl.SubPageTitle = _regionContainer.name + "分区";
            await Refresh();

            _isInit = true;
        }
        private void BuildBoard()
        {
            RegionContainer[] containers = new RegionContainer[4];

            for (int i = 0; i < 4; i++)
            {
                containers[i] = new RegionContainer(i * 22, i * 25, 100 - (i * 22), 25, RegionContainer.OrientationType.VERTICAL);
                containers[i].SetAcceptElement(_idea);

                BoardRegion region = new BoardRegion(new Color(0, 0, 0), 0.0f, "Name");
                region.Attributes.Add(new BoardRegion.Attribute("Area", ((EnumType)_idea.GetAttribute("Area").Type).Domain[i]));
                region.PopupAttribute = "Name";
                containers[i].AddRegion(region);

                _wholeProduct.Board.AddContainer(containers[i]);
            }
        }
        private void BuildBoard()
        {
            RegionContainer[] originalityContainers = new RegionContainer[4];

            var coordinates = new List <System.Drawing.Point> {
                new System.Drawing.Point(5, 13), new System.Drawing.Point(5, 63), new System.Drawing.Point(55, 13), new System.Drawing.Point(55, 63)
            };

            for (int i = 0; i < 4; i++)
            {
                originalityContainers[i] = new RegionContainer(coordinates[i].X, coordinates[i].Y, 40, 35, RegionContainer.OrientationType.VERTICAL);
                BoardRegion region = new BoardRegion(new Color(0, 0, 0), 0.0f, "Name");
                region.PopupAttribute = "Name";
                originalityContainers[i].AddRegion(region);
                SWOT.Board.AddContainer(originalityContainers[i]);
            }
            originalityContainers[0].SetAcceptElement(strength);
            originalityContainers[2].SetAcceptElement(weakness);
            originalityContainers[1].SetAcceptElement(opportunity);
            originalityContainers[3].SetAcceptElement(threat);
        }
Пример #13
0
        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            App.AppViewModel.CurrentPagePanel.ScrollToBottom = ScrollViewerBottomHandle;
            App.AppViewModel.CurrentPagePanel.ScrollChanged  = ScrollViewerChanged;
            RecommendVideoView.DesiredWidth = 220 + ((App.AppViewModel.BasicFontSize - 14) * 5);
            if (e.NavigationMode == NavigationMode.Back)
            {
                return;
            }
            if (e.Parameter != null && e.Parameter is RegionContainer _con)
            {
                if (_region != null && _con.tid == _region.tid)
                {
                    return;
                }
                _region = _con;
            }
            TitleBlock.Text = _region.name;

            await Refresh();

            _isInit = true;
        }
Пример #14
0
        /// <summary>
        /// 为聚合对象生成组合控件。
        /// </summary>
        /// <param name="aggt">
        /// 需要生成聚合控件的聚合对象元数据
        /// </param>
        /// <param name="mainView">
        /// 已经生成好的聚合对象 aggt 中的“根”对象所对应的 LogicalView。
        /// </param>
        /// <returns></returns>
        private ControlResult GenerateCompoundControl(AggtBlocks aggt, LogicalView mainView)
        {
            var regions = new RegionContainer(aggt);

            //如果不要查询面板,则需要生成主区域
            var viewInfo = aggt.MainBlock.ViewMeta;

            regions.Add(TraditionalRegions.Main, AutoUIHelper.CreateBusyControlResult(mainView));
            if (mainView.CommandsContainer != null)
            {
                regions.Add(TraditionalRegions.CommandsContainer, new ControlResult(mainView.CommandsContainer, mainView));
            }

            //Surrounders
            this.SurroundersToRegions(aggt.Surrounders, mainView, regions);

            //Children
            this.ChildrenToRegions(aggt.Children, mainView, regions);

            //Layout
            var layout = CreateLayoutMethod(aggt);
            var result = layout.Arrange(regions);

            //在 View 中保存最终布局完成的控件。
            mainView.LayoutControl = result;

            //返回布局后的整个控件。
            var ui = new ControlResult(result, mainView, aggt);

            if (this.GesturesLocation == GesturesLocation.Layout)
            {
                this.CreateCommandBindings(ui.Control, ui.MainView);
            }

            return(ui);
        }
Пример #15
0
        private void Reset()
        {
            RankDetailList.Clear();
            RegionCollection.Clear();
            foreach (var item in App.BiliViewModel.RegionCollection)
            {
                if (item.is_bangumi == 0)
                {
                    RegionCollection.Add(item);
                }
            }
            var total = new RegionContainer()
            {
                tid  = 0,
                reid = 0,
                name = "全区动态",
                logo = "ms-appx:///Assets/logo_small.png",
                type = 1
            };
            var chinaAnime = new RegionContainer()
            {
                tid  = 168,
                reid = 0,
                name = "国创相关",
                logo = "http://i0.hdslb.com/bfs/archive/1586ec926eac1ea876cb74d32df51394d8e72341.png",
                type = 1
            };

            RegionCollection.Insert(0, total);
            RegionCollection.Insert(1, chinaAnime);
            foreach (var item in RegionCollection)
            {
                RankDetailList.Add(new Tuple <int, List <WebVideo> >(item.tid, new List <WebVideo>()));
            }
            RegionListView.SelectedIndex = 0;
        }
        private void BuildBoard()
        {
            RegionContainer[] originalityContainers = new RegionContainer[4];

            var coordinates = new List <System.Drawing.Point> {
                new System.Drawing.Point(5, 50), new System.Drawing.Point(50, 5), new System.Drawing.Point(50, 50)
            };

            for (int i = 0; i < 3; i++)
            {
                originalityContainers[i] = new RegionContainer(coordinates[i].X, coordinates[i].Y, 45, 45, RegionContainer.OrientationType.VERTICAL);
                originalityContainers[i].SetAcceptElement(idea);
                BoardRegion region = new BoardRegion(new Color(0, 0, 0), 0.0f, "Nazwa");
                region.PopupAttribute = "Nazwa";
                originalityContainers[i].AddRegion(region);
                matrix.Board.AddContainer(originalityContainers[i]);
            }
            //     originalityContainers[3] = new RegionContainer(coordinates[0].X+10, coordinates[0].Y+10, 25, 25, RegionContainer.OrientationType.VERTICAL);
            //     originalityContainers[3].SetAcceptElement(idea);
            //     BoardRegion region2 = new BoardRegion(new Color(0, 250, 0), 1.0f, "Nazwa");
            //     region2.PopupAttribute = "Nazwa";
            //     originalityContainers[3].AddRegion(region2);
            //     matrix.Board.AddContainer(originalityContainers[3]);
        }
Пример #17
0
 internal UIComponents(RegionContainer regions)
 {
     this._regions = regions;
 }
Пример #18
0
 /// <summary>
 /// 为多个控件进行布局,然后返回组合的控件。
 /// </summary>
 /// <param name="regions"></param>
 /// <returns></returns>
 protected abstract FrameworkElement ArrageCore(RegionContainer regions);
Пример #19
0
        /// <summary>
        /// 为聚合对象生成组合控件。
        /// </summary>
        /// <param name="aggt">
        /// 需要生成聚合控件的聚合对象元数据
        /// </param>
        /// <param name="mainView">
        /// 已经生成好的聚合对象 aggt 中的“根”对象所对应的 LogicalView。
        /// </param>
        /// <returns></returns>
        private ControlResult GenerateCompoundControl(AggtBlocks aggt, LogicalView mainView)
        {
            var regions = new RegionContainer(aggt);

            //如果不要查询面板,则需要生成主区域
            var viewInfo = aggt.MainBlock.ViewMeta;

            regions.Add(TraditionalRegions.Main, AutoUIHelper.CreateBusyControlResult(mainView));
            if (mainView.CommandsContainer != null)
            {
                regions.Add(TraditionalRegions.CommandsContainer, new ControlResult(mainView.CommandsContainer, mainView));
            }

            //Surrounders
            this.SurroundersToRegions(aggt.Surrounders, mainView, regions);

            //Children
            this.ChildrenToRegions(aggt.Children, mainView, regions);

            //Layout
            var layout = CreateLayoutMethod(aggt);
            var result = layout.Arrange(regions);

            //在 View 中保存最终布局完成的控件。
            mainView.LayoutControl = result;

            //返回布局后的整个控件。
            var ui = new ControlResult(result, mainView, aggt);

            if (this.GesturesLocation == GesturesLocation.Layout)
            {
                this.CreateCommandBindings(ui.Control, ui.MainView);
            }

            return ui;
        }
Пример #20
0
        /// <summary>
        /// 把环绕块生成控件并加入到 Regions 中。
        /// </summary>
        /// <param name="surrounders"></param>
        /// <param name="mainView"></param>
        /// <param name="regions"></param>
        private void SurroundersToRegions(IList<AggtBlocks> surrounders, LogicalView mainView, RegionContainer regions)
        {
            foreach (var surrounder in surrounders)
            {
                var surBlock = surrounder.MainBlock as SurrounderBlock;

                var surrounderType = surBlock.SurrounderType;
                var surrounderView = this.CreateSurrounderView(mainView, surBlock);

                //为 Surrouder 生成它的聚合控件
                var surrounderControl = this.GenerateCompoundControl(surrounder, surrounderView);

                regions.Add(surrounderType, surrounderControl);
            }
        }
Пример #21
0
        public bool AcceptElement(int elementId, int containerId, int regionId)
        {
            ElementInstance element = GetElement(elementId);

            if (element == null)
            {
                return(false);
            }

            RegionContainer container = Definition.Board.GetContainer(containerId);

            if (container == null)
            {
                return(false);
            }

            if (container.AcceptElementId != element.Definition.Id)
            {
                return(false);
            }

            BoardRegion region = container.GetRegion(regionId);

            if (region == null)
            {
                return(false);
            }

            if (element.IsAccepted == true && (element.Region.Container.Id != containerId || element.Region.Id != regionId))
            {
                GetAcceptedElements(element.Region.Container.Id, element.Region.Id).ForEach(el => {
                    if (el.Order > element.Order)
                    {
                        el.Order--;
                    }
                });
            }

            var elements = GetAcceptedElements(containerId, regionId);

            if (element.IsAccepted == true && element.Region.Container.Id == containerId && element.Region.Id == regionId)
            {
                elements.ForEach(el => {
                    if (el.Order > element.Order)
                    {
                        el.Order--;
                    }
                });
            }

            foreach (var a in region.Attributes)
            {
                element[a.Name] = a.Value;
            }

            foreach (var calcAttr in region.CalcAttributes)
            {
                element[calcAttr.Name] = ExecuteQuery(calcAttr.Query);
            }

            element.IsAccepted = true;
            element.Region     = region;
            element.Order      = elements.Count;

            Definition.OnAcceptElement(this, element);

            return(true);
        }
Пример #22
0
        /// <summary>
        /// 把孩子块生成控件并加入到 Regions 中。
        /// </summary>
        /// <param name="children"></param>
        /// <param name="mainView"></param>
        /// <param name="regions"></param>
        private void ChildrenToRegions(IList <AggtBlocks> children, LogicalView mainView, RegionContainer regions)
        {
            foreach (var child in children)
            {
                var childBlock = child.MainBlock as ChildBlock;

                if (this.NeedPermission && !PermissionMgr.CanShowBlock(this.PermissionModule, childBlock))
                {
                    continue;
                }

                //生成 childView
                LogicalView childView = this._viewFactory.CreateView(childBlock);
                childView.ChildBlock = childBlock;

                //子视图默认不显示,当选中某个父对象时,再重新计算其可见性。
                childView.IsVisible = false;

                childView.Parent = mainView;

                //ChildView Commands Container
                this.CreateCommandsUI(childView, childBlock);

                //Child Control
                var childControl = this.GenerateCompoundControl(child, childView);

                //Region
                regions.AddChildren(childBlock.Label, childControl);

                this.OnChildUICreated(childControl);
            }
        }
Пример #23
0
        /// <summary>
        /// 把环绕块生成控件并加入到 Regions 中。
        /// </summary>
        /// <param name="surrounders"></param>
        /// <param name="mainView"></param>
        /// <param name="regions"></param>
        private void SurroundersToRegions(IList <AggtBlocks> surrounders, LogicalView mainView, RegionContainer regions)
        {
            foreach (var surrounder in surrounders)
            {
                var surBlock = surrounder.MainBlock as SurrounderBlock;

                var surrounderType = surBlock.SurrounderType;
                var surrounderView = this.CreateSurrounderView(mainView, surBlock);

                //为 Surrouder 生成它的聚合控件
                var surrounderControl = this.GenerateCompoundControl(surrounder, surrounderView);

                regions.Add(surrounderType, surrounderControl);
            }
        }
Пример #24
0
 public void Reload(RegionContainer regionContainer)
 {
     regionContainer.Reload(this);
 }
Пример #25
0
 public void Edit(RegionContainer regionContainer)
 {
     dataBase.ShowEditWindow(this, regionContainer);
 }
Пример #26
0
 /// <summary>
 /// 为多个控件进行布局,然后返回组合的控件。
 /// </summary>
 /// <param name="regions"></param>
 /// <returns></returns>
 protected abstract FrameworkElement ArrageCore(RegionContainer regions);
Пример #27
0
        /// <summary>
        /// 把孩子块生成控件并加入到 Regions 中。
        /// </summary>
        /// <param name="children"></param>
        /// <param name="mainView"></param>
        /// <param name="regions"></param>
        private void ChildrenToRegions(IList<AggtBlocks> children, LogicalView mainView, RegionContainer regions)
        {
            foreach (var child in children)
            {
                var childBlock = child.MainBlock as ChildBlock;

                if (this.NeedPermission && !PermissionMgr.CanShowBlock(this.PermissionModule, childBlock)) continue;

                //生成 childView
                LogicalView childView = this._viewFactory.CreateView(childBlock);
                childView.ChildBlock = childBlock;

                //子视图默认不显示,当选中某个父对象时,再重新计算其可见性。
                childView.IsVisible = false;

                childView.Parent = mainView;

                //ChildView Commands Container
                this.CreateCommandsUI(childView, childBlock);

                //Child Control
                var childControl = this.GenerateCompoundControl(child, childView);

                //Region
                regions.AddChildren(childBlock.Label, childControl);

                this.OnChildUICreated(childControl);
            }
        }
Пример #28
0
        /// <summary>
        /// Builds a BlockContainer control, populating it with the appropriate controls
        /// based on the supplied XML TDF data.
        /// </summary>
        /// <returns>The BlockContainer that was created.</returns>
        protected BlockContainer BuildStruct(XmlNode node, bool mainBlock)
        {
            int depth = 0;

            // Setup the block container.
            BlockContainer container = new BlockContainer();

            container.LinkedUndoManager = this.undoManager;
            containers.Push(container);

            XmlNodeList valueNodes = node.SelectNodes("*");

            foreach (XmlNode valueNode in valueNodes)
            {
                if (valueNode.Name.ToLower() == "group")
                {
                    // Make sure that this node is a direct child of the Main Struct.
                    // That's the only place that groups are allowed to exist.
                    bool allowGroup = false;
                    if (valueNode.ParentNode.Name.ToLower() == "struct")
                    {
                        if (valueNode.ParentNode.Attributes["name"] != null)
                        {
                            if (valueNode.ParentNode.Attributes["name"].InnerText == mainStructName)
                            {
                                allowGroup = true;
                            }
                        }
                    }
                    if (!allowGroup)
                    {
                        throw new Exception("Unable to create group: Not a direct member of the main struct.");
                    }

                    buildDepth.Push(0);
                    CreateTab(valueNode.Attributes["caption"].InnerText);
                    BlockContainer newContainer = BuildStruct(valueNode, mainBlock);
                    newContainer.DatabindChildrenToBlock(this.tagData);
                    containers.Peek().AddFieldContainer(newContainer);
                    containers.Pop();
                    buildDepth.Pop();
                }
                else if (valueNode.Name.ToLower() == "section")
                {
                    // NOTE: This code is duplicated from the block creation.
                    // A seperate method for building sections would really be ideal, but I don't feel
                    // like going into that right now.
                    IFieldContainer fieldContainer;
                    if (((int)buildDepth.Peek()) < 1)
                    {
                        fieldContainer = new SectionContainer();
                        (fieldContainer as SectionContainer).Title = valueNode.Attributes["caption"].InnerText;
                        if (valueNode.Attributes["description"] != null)
                        {
                            (fieldContainer as SectionContainer).Description = valueNode.Attributes["description"].InnerText;
                        }
                    }
                    else
                    {
                        fieldContainer = new RegionContainer();
                        (fieldContainer as RegionContainer).Caption = valueNode.Attributes["caption"].InnerText;
                    }
                    depth = (int)(buildDepth.Pop());
                    buildDepth.Push(depth + 1);

                    BlockContainer newContainer = BuildStruct(valueNode, mainBlock);
                    newContainer.DatabindChildrenToBlock(this.tagData);
                    fieldContainer.AddFieldContainer(newContainer);
                    containers.Peek().AddFieldContainer(fieldContainer);
                }
                else if (valueNode.Name.ToLower() == "value")
                {
                    string valueName        = valueNode.Attributes["name"].InnerText;
                    Field  fieldControl     = new Field();
                    string valueText        = valueNode.Attributes["type"].InnerText;
                    string fullPropertyName = (mainBlock ? className + "Values." : "") + Types.GlobalMethods.MakePublicName(valueName);

                    if (standardControls.ContainsKey(valueText))
                    {
                        //TODO: Look into adding the types into the hashtable, rather than using reflection.
                        string   controlTypeName  = "TagEditor.Controls." + valueText;
                        Type     fieldControlType = Type.GetType(controlTypeName);
                        Assembly targetAssembly   = Assembly.GetAssembly(fieldControlType);
                        fieldControl = (targetAssembly.CreateInstance(controlTypeName) as Field);
                        fieldControl.Configure(valueNode);
                        if (valueText != "Block")
                        {
                            containers.Peek().AddField(fieldControl);
                        }
                        else
                        {
                            fieldControl = new Block();
                            fieldControl.Configure(valueNode);
                            (fieldControl as Block).Caption = "Select Block:";

                            // At this point, we need to recurse and create the sub control for this block.
                            // Step 1: Locate the proper struct in the document.
                            string  structName = valueNode.Attributes["struct"].InnerText;
                            XmlNode structNode = tagDefinition.SelectSingleNode("//struct[@name='" + structName + "']");

                            IFieldContainer fieldContainer;
                            if (((int)buildDepth.Peek()) < 1)
                            {
                                fieldContainer = new SectionContainer();
                                (fieldContainer as SectionContainer).Title = Utility.CapitalizeWords(fieldControl.Caption);
                                XmlNode descriptionNode = structNode.SelectSingleNode("description");
                                if (descriptionNode != null)
                                {
                                    (fieldContainer as SectionContainer).Description = descriptionNode.InnerText;
                                }
                            }
                            else
                            {
                                fieldContainer = new RegionContainer();
                                (fieldContainer as RegionContainer).Caption = Utility.CapitalizeWords(fieldControl.Caption);
                            }
                            depth = (int)(buildDepth.Pop());
                            buildDepth.Push(depth + 1);

                            // Step 2: Build the BlockContainer and dock it.
                            BlockContainer subBlockContainer = BuildStruct(structNode, false);

                            fieldContainer.AddField(fieldControl);
                            fieldContainer.AddFieldContainer(subBlockContainer);

                            containers.Peek().AddFieldContainer(fieldContainer);
                            subBlockContainer.Refresh();

                            // Step 3: Wire up the BlockChanged event for databinding.
                            (fieldControl as Block).BlockChanged += new Block.BlockChangedHandler(subBlockContainer.DatabindChildrenToBlock);
                            (fieldControl as Block).Initialize();
                        }
                    }
                    else
                    {
                        continue;
                    }
                    fieldControl.BoundPropertyName = fullPropertyName;
                }
            }
            depth = (int)(buildDepth.Pop());
            buildDepth.Push(depth - 1);
            containers.Pop();
            return(container);
        }