private void BuildControl(KeyValuePair <string, Engine.Effects.VisualPropertyItem> key)
        {
            Engine.Effects.VisualPropertyItem pi = key.Value;

            PaintualUI.Controls.PropertyPage.TPropertyControl ctrl = null;

            switch (pi.DisplayControlType)
            {
            case Engine.Attributes.Meta.DisplayControlTypes.Textbox:
                switch (pi.DataType)
                {
                case Engine.PropertyDataTypes.Int:
                    ctrl = BuildPropertyIntBox(pi);
                    break;

                case Engine.PropertyDataTypes.Double:
                    ctrl = BuildPropertyDoubleBox(pi);
                    break;

                case Engine.PropertyDataTypes.Text:
                    ctrl = BuildPropertyTextBox(pi);
                    break;

                default:
                    throw new Exception();
                }

                break;

            case Engine.Attributes.Meta.DisplayControlTypes.ColorVariance:
                ctrl = BuildPropertyObject(pi);
                break;

            case Engine.Attributes.Meta.DisplayControlTypes.RadioButtons:
                ctrl = BuildPropertyRadioButtons(pi);
                break;

            case Engine.Attributes.Meta.DisplayControlTypes.FolderSelector:
                ctrl = BuildPropertyFolderSelector(pi);
                break;

            case Engine.Attributes.Meta.DisplayControlTypes.Checkbox:
                ctrl = BuildPropertyCheckBox(pi);
                break;

            default:
                throw new ArgumentException(String.Format("Either the control type is set to 'None' or the type \"{0}\" is not supported in the VisualBuilder", pi.DisplayControlType.ToString()));
            }

            FlowPanelContainer.Children.Add(ctrl);

            // since getting control by name seems not to work, can retrieve later by index from pi instance.
            pi.Index = FlowPanelContainer.Children.Count - 1;
        }
        private void UpdateControlVisuals()
        {
            foreach (UIElement uie in FlowPanelContainer.Children)
            {
                PaintualUI.Controls.PropertyPage.TPropertyControl tpc = (PaintualUI.Controls.PropertyPage.TPropertyControl)uie;

                if (tpc != null)
                {
                    tpc.UpdateVisual();
                }
            }
        }