/// <summary>
        /// Generates the specified source.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="method">The method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, method, generateField);

            Control control = source as Control;

            CodeComHelper.GenerateBrushField(method, fieldReference, source, Control.BackgroundProperty);
            CodeComHelper.GenerateBrushField(method, fieldReference, source, Control.BorderBrushProperty);
            CodeComHelper.GenerateThicknessField(method, fieldReference, source, Control.BorderThicknessProperty);
            CodeComHelper.GenerateThicknessField(method, fieldReference, source, Control.PaddingProperty);
            CodeComHelper.GenerateBrushField(method, fieldReference, source, Control.ForegroundProperty);
            CodeComHelper.GenerateEnumField <HorizontalAlignment>(method, fieldReference, source, Control.HorizontalContentAlignmentProperty);
            CodeComHelper.GenerateEnumField <VerticalAlignment>(method, fieldReference, source, Control.VerticalContentAlignmentProperty);
            CodeComHelper.GenerateField <bool>(method, fieldReference, source, Control.IsTabStopProperty);
            CodeComHelper.GenerateField <int>(method, fieldReference, source, Control.TabIndexProperty);

            CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, Control.TemplateProperty);

            if (!CodeComHelper.IsDefaultValue(source, Control.FontFamilyProperty) ||
                !CodeComHelper.IsDefaultValue(source, Control.FontSizeProperty) ||
                !CodeComHelper.IsDefaultValue(source, Control.FontStyleProperty) ||
                !CodeComHelper.IsDefaultValue(source, Control.FontWeightProperty))
            {
                FontGenerator.Instance.AddFont(control.FontFamily, control.FontSize, control.FontStyle, control.FontWeight, method);
            }

            CodeComHelper.GenerateFontFamilyField(method, fieldReference, source, Control.FontFamilyProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, Control.FontSizeProperty);
            CodeComHelper.GenerateFontStyleField(method, fieldReference, source, Control.FontStyleProperty, Control.FontWeightProperty);

            return(fieldReference);
        }
        /// <summary>
        /// Generates control fields
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="method">The initialize method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField)
        {
            CodeExpression fieldReference = new CodeThisReferenceExpression();

            CodeComHelper.GenerateBrushField(method, fieldReference, source, Control.BackgroundProperty);
            CodeComHelper.GenerateBrushField(method, fieldReference, source, Control.BorderBrushProperty);
            CodeComHelper.GenerateThicknessField(method, fieldReference, source, Control.BorderThicknessProperty);
            CodeComHelper.GenerateThicknessField(method, fieldReference, source, Control.PaddingProperty);
            CodeComHelper.GenerateBrushField(method, fieldReference, source, Control.ForegroundProperty);
            CodeComHelper.GenerateField <bool>(method, fieldReference, source, UIRoot.IsTabNavigationEnabledProperty);
            CodeComHelper.GenerateColorField(method, fieldReference, source, UIRoot.MessageBoxOverlayProperty);

            CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, FrameworkElement.StyleProperty);

            Control control = source as Control;

            if (!CodeComHelper.IsDefaultValue(source, Control.FontFamilyProperty) ||
                !CodeComHelper.IsDefaultValue(source, Control.FontSizeProperty) ||
                !CodeComHelper.IsDefaultValue(source, Control.FontStyleProperty) ||
                !CodeComHelper.IsDefaultValue(source, Control.FontWeightProperty))
            {
                FontGenerator.Instance.AddFont(control.FontFamily, control.FontSize, control.FontStyle, control.FontWeight, method);
            }

            CodeComHelper.GenerateFontFamilyField(method, fieldReference, source, Control.FontFamilyProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, Control.FontSizeProperty);
            CodeComHelper.GenerateFontStyleField(method, fieldReference, source, Control.FontStyleProperty, Control.FontWeightProperty);

            return(fieldReference);
        }
        /// <summary>
        /// Generates control fields
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="initMethod">The initialize method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod initMethod, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, initMethod, generateField);

            CodeComHelper.GenerateEnumField <Orientation>(initMethod, fieldReference, source, ScrollBar.OrientationProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(initMethod, fieldReference, source, ScrollBar.ViewportSizeProperty);
            return(fieldReference);
        }
        /// <summary>
        /// Generates the specified source.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="method">The method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, method, generateField);

            CodeComHelper.GenerateEnumField <Orientation>(method, fieldReference, source, Slider.OrientationProperty);
            CodeComHelper.GenerateField <bool>(method, fieldReference, source, Slider.IsSnapToTickEnabledProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, Slider.TickFrequencyProperty);

            return(fieldReference);
        }
        /// <summary>
        /// Generates control fields
        /// </summary>
        /// <param name="source">The dependence object</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="initMethod">The initialize method.</param>
        /// <param name="generateField"></param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod initMethod, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, initMethod, generateField);

            ComboBox combo = source as ComboBox;

            CodeComHelper.GenerateFieldDoubleToFloat(initMethod, fieldReference, source, ComboBox.MaxDropDownHeightProperty);

            return(fieldReference);
        }
        /// <summary>
        /// Generates control fields
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="method">The initialize method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, method, generateField);

            Rectangle rect = source as Rectangle;

            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, Rectangle.RadiusXProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, Rectangle.RadiusYProperty);

            return(fieldReference);
        }
Example #7
0
        /// <summary>
        /// Generates the specified initialize method.
        /// </summary>
        /// <param name="source">The dependency object</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="initMethod">The initialize method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod initMethod, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, initMethod, generateField);

            WrapPanel wrapPanel = source as WrapPanel;

            CodeComHelper.GenerateFieldDoubleToFloat(initMethod, fieldReference, source, WrapPanel.ItemHeightProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(initMethod, fieldReference, source, WrapPanel.ItemWidthProperty);
            CodeComHelper.GenerateEnumField <Orientation>(initMethod, fieldReference, source, WrapPanel.OrientationProperty);

            return(fieldReference);
        }
Example #8
0
        /// <summary>
        /// Generates control fields
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="method">The initialize method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, method, generateField);
            RangeBase      rangeBase      = source as RangeBase;

            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, RangeBase.MinimumProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, RangeBase.MaximumProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, RangeBase.ValueProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, RangeBase.SmallChangeProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, RangeBase.LargeChangeProperty);
            return(fieldReference);
        }
        /// <summary>
        /// Generates control fields
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="method">The initialize method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, method, generateField);

            Shape shape = source as Shape;

            CodeComHelper.GenerateEnumField <Stretch>(method, fieldReference, source, Shape.StretchProperty);
            CodeComHelper.GenerateBrushField(method, fieldReference, source, Shape.FillProperty);
            CodeComHelper.GenerateBrushField(method, fieldReference, source, Shape.StrokeProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, Shape.StrokeThicknessProperty);

            return(fieldReference);
        }
Example #10
0
        /// <summary>
        /// Generates control fields
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="method">The initialize method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, method, generateField);

            Line line = source as Line;

            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, line, Line.X1Property);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, line, Line.X2Property);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, line, Line.Y1Property);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, line, Line.Y2Property);

            return(fieldReference);
        }
        /// <summary>
        /// Generates control fields
        /// </summary>
        /// <param name="source">The source</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="initMethod">The initialize method.</param>
        /// <param name="generateField"></param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod initMethod, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, initMethod, generateField);

            Grid grid     = source as Grid;
            int  rowIndex = 0;

            foreach (var row in grid.RowDefinitions)
            {
                string rowName = string.Format("row_{0}_{1}", grid.Name, rowIndex);
                CodeVariableDeclarationStatement rowVar = new CodeVariableDeclarationStatement(
                    "RowDefinition", rowName, new CodeObjectCreateExpression("RowDefinition"));
                initMethod.Statements.Add(rowVar);

                CodeVariableReferenceExpression rowRef = new CodeVariableReferenceExpression(rowName);

                CodeComHelper.GenerateGridLengthField(initMethod, rowRef, row, RowDefinition.HeightProperty);
                CodeComHelper.GenerateFieldDoubleToFloat(initMethod, rowRef, row, RowDefinition.MinHeightProperty);
                CodeComHelper.GenerateFieldDoubleToFloat(initMethod, rowRef, row, RowDefinition.MaxHeightProperty);

                CodeMethodInvokeExpression addRow = new CodeMethodInvokeExpression(fieldReference, "RowDefinitions.Add", rowRef);
                initMethod.Statements.Add(addRow);

                rowIndex++;
            }

            int columnIndex = 0;

            foreach (var col in grid.ColumnDefinitions)
            {
                string colName = string.Format("col_{0}_{1}", grid.Name, columnIndex);

                CodeVariableDeclarationStatement colVar = new CodeVariableDeclarationStatement(
                    "ColumnDefinition", colName, new CodeObjectCreateExpression("ColumnDefinition"));
                initMethod.Statements.Add(colVar);

                CodeVariableReferenceExpression colRef = new CodeVariableReferenceExpression(colName);

                CodeComHelper.GenerateGridLengthField(initMethod, colRef, col, ColumnDefinition.WidthProperty);
                CodeComHelper.GenerateFieldDoubleToFloat(initMethod, colRef, col, ColumnDefinition.MinWidthProperty);
                CodeComHelper.GenerateFieldDoubleToFloat(initMethod, colRef, col, ColumnDefinition.MaxWidthProperty);

                CodeMethodInvokeExpression addCol = new CodeMethodInvokeExpression(fieldReference, "ColumnDefinitions.Add", colRef);
                initMethod.Statements.Add(addCol);

                columnIndex++;
            }


            return(fieldReference);
        }
Example #12
0
        /// <summary>
        /// Generates code
        /// </summary>
        /// <param name="source">The dependence object</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="initMethod">The initialize method.</param>
        /// <param name="generateField"></param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod initMethod, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, initMethod, generateField);

            ScrollViewer scrollViewer = source as ScrollViewer;

            CodeComHelper.GenerateEnumField <ScrollBarVisibility>(initMethod, fieldReference, source, ScrollViewer.HorizontalScrollBarVisibilityProperty);
            CodeComHelper.GenerateEnumField <ScrollBarVisibility>(initMethod, fieldReference, source, ScrollViewer.VerticalScrollBarVisibilityProperty);
            CodeComHelper.GenerateEnumField <PanningMode>(initMethod, fieldReference, source, ScrollViewer.PanningModeProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(initMethod, fieldReference, source, ScrollViewer.PanningRatioProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(initMethod, fieldReference, source, ScrollViewer.PanningDecelerationProperty);

            return(fieldReference);
        }
        /// <summary>
        /// Generates control fields
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="initMethod">The initialize method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod initMethod, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, initMethod, generateField);

            TextBoxBase textBoxBase = source as TextBoxBase;

            CodeComHelper.GenerateField <bool>(initMethod, fieldReference, source, TextBoxBase.IsReadOnlyProperty);
            CodeComHelper.GenerateEnumField <ScrollBarVisibility>(initMethod, fieldReference, source, TextBoxBase.HorizontalScrollBarVisibilityProperty);
            CodeComHelper.GenerateEnumField <ScrollBarVisibility>(initMethod, fieldReference, source, TextBoxBase.VerticalScrollBarVisibilityProperty);
            CodeComHelper.GenerateBrushField(initMethod, fieldReference, source, TextBoxBase.CaretBrushProperty);
            CodeComHelper.GenerateBrushField(initMethod, fieldReference, source, TextBoxBase.SelectionBrushProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(initMethod, fieldReference, source, TextBoxBase.SelectionOpacityProperty);
            CodeComHelper.GenerateField <bool>(initMethod, fieldReference, source, TextBoxBase.IsUndoEnabledProperty);
            CodeComHelper.GenerateField <int>(initMethod, fieldReference, source, TextBoxBase.UndoLimitProperty);

            return(fieldReference);
        }
        /// <summary>
        /// Generates code
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="method">The initialize method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, method, generateField);

            TextBlock textBlock = source as TextBlock;

            CodeComHelper.GenerateBrushField(method, fieldReference, source, TextBlock.BackgroundProperty);
            CodeComHelper.GenerateBrushField(method, fieldReference, source, TextBlock.ForegroundProperty);

            if (textBlock.Inlines.Count > 1)
            {
                StringBuilder text = new StringBuilder();
                foreach (var line in textBlock.Inlines)
                {
                    Run runLine = line as Run;
                    if (runLine != null)
                    {
                        text.AppendLine(runLine.Text);
                    }
                }

                CodeComHelper.GenerateFieldNonGeneric(method, fieldReference, "Text", text.ToString());
            }
            else
            {
                CodeComHelper.GenerateField <string>(method, fieldReference, source, TextBlock.TextProperty);
            }

            CodeComHelper.GenerateThicknessField(method, fieldReference, source, TextBlock.PaddingProperty);
            CodeComHelper.GenerateEnumField <TextAlignment>(method, fieldReference, source, TextBlock.TextAlignmentProperty);
            CodeComHelper.GenerateEnumField <TextWrapping>(method, fieldReference, source, TextBlock.TextWrappingProperty);

            if (!CodeComHelper.IsDefaultValue(source, TextBlock.FontFamilyProperty) ||
                !CodeComHelper.IsDefaultValue(source, TextBlock.FontSizeProperty) ||
                !CodeComHelper.IsDefaultValue(source, TextBlock.FontStyleProperty) ||
                !CodeComHelper.IsDefaultValue(source, TextBlock.FontWeightProperty))
            {
                FontGenerator.Instance.AddFont(textBlock.FontFamily, textBlock.FontSize, textBlock.FontStyle, textBlock.FontWeight, method);
            }

            CodeComHelper.GenerateFontFamilyField(method, fieldReference, source, TextBlock.FontFamilyProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, TextBlock.FontSizeProperty);
            CodeComHelper.GenerateFontStyleField(method, fieldReference, source, TextBlock.FontStyleProperty, TextBlock.FontWeightProperty);

            return(fieldReference);
        }
        /// <summary>
        /// Generates code for value
        /// </summary>
        /// <param name="parentClass">The parent class.</param>
        /// <param name="method">The method.</param>
        /// <param name="value">The value.</param>
        /// <param name="baseName">Name of the base.</param>
        /// <param name="dictionary">The dictionary.</param>
        /// <returns></returns>
        public CodeExpression Generate(CodeTypeDeclaration parentClass, CodeMemberMethod method, object value, string baseName, ResourceDictionary dictionary = null)
        {
            CodeExpression valueExpression = null;

            if (value != null)
            {
                var geometryVariable = new CodeVariableDeclarationStatement("EllipseGeometry", baseName, new CodeObjectCreateExpression("EllipseGeometry"));
                method.Statements.Add(geometryVariable);
                valueExpression = new CodeVariableReferenceExpression(baseName);

                EllipseGeometry ellipse = value as EllipseGeometry;
                CodeComHelper.GenerateFieldDoubleToFloat(method, valueExpression, ellipse, EllipseGeometry.RadiusXProperty);
                CodeComHelper.GenerateFieldDoubleToFloat(method, valueExpression, ellipse, EllipseGeometry.RadiusYProperty);
                CodeComHelper.GeneratePointField(method, valueExpression, ellipse, EllipseGeometry.CenterProperty);
            }

            return(valueExpression);
        }
Example #16
0
        /// <summary>
        /// Generates code for value
        /// </summary>
        /// <param name="parentClass">The parent class.</param>
        /// <param name="method">The method.</param>
        /// <param name="value">The value.</param>
        /// <param name="baseName">Name of the base.</param>
        /// <param name="dictionary">The dictionary.</param>
        /// <returns></returns>
        public override CodeExpression Generate(CodeTypeDeclaration parentClass, CodeMemberMethod method, object value, string baseName, ResourceDictionary dictionary = null)
        {
            CodeExpression  baseValue = base.Generate(parentClass, method, value, baseName, dictionary);
            DoubleAnimation animation = value as DoubleAnimation;

            CodeComHelper.GenerateFieldDoubleToFloat(method, baseValue, animation, DoubleAnimation.FromProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, baseValue, animation, DoubleAnimation.ToProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, baseValue, animation, DoubleAnimation.ByProperty);
            CodeComHelper.GenerateField <bool>(method, baseValue, animation, DoubleAnimation.IsAdditiveProperty);

            if (animation.EasingFunction != null)
            {
                EasingFunctionBase easingFunc = animation.EasingFunction as EasingFunctionBase;
                CodeComHelper.GenerateEasingFunction(method, baseValue, baseName, easingFunc);
            }

            return(baseValue);
        }
Example #17
0
        /// <summary>
        /// Generates the specified source.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="method">The method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField)
        {
            CodeExpression fieldReference = base.Generate(source, classType, method, generateField);

            Popup popup = source as Popup;

            CodeComHelper.GenerateField <bool>(method, fieldReference, source, Popup.IsOpenProperty);
            CodeComHelper.GenerateEnumField <PlacementMode>(method, fieldReference, source, Popup.PlacementProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, Popup.VerticalOffsetProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, Popup.HorizontalOffsetProperty);

            UIElement content = popup.Child as UIElement;

            if (content == null && popup.Child != null)
            {
                CodeComHelper.GenerateField <object>(method, fieldReference, source, Popup.ChildProperty);
            }

            return(fieldReference);
        }
        /// <summary>
        /// Generates control fields
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="method">The initialize method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public virtual CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField)
        {
            FrameworkElement element  = source as FrameworkElement;
            string           typeName = element.GetType().Name;

            if (string.IsNullOrEmpty(element.Name))
            {
                element.Name = "e_" + NameUniqueId;
                NameUniqueId++;
            }

            if (generateField)
            {
                CodeMemberField field = new CodeMemberField(typeName, element.Name);
                classType.Members.Add(field);
            }

            CodeComment comment = new CodeComment(element.Name + " element");

            method.Statements.Add(new CodeCommentStatement(comment));

            CodeExpression fieldReference = null;

            if (!generateField)
            {
                fieldReference = new CodeVariableReferenceExpression(element.Name);
                CodeTypeReference variableType = new CodeTypeReference(typeName);
                CodeVariableDeclarationStatement declaration = new CodeVariableDeclarationStatement(variableType, element.Name);
                declaration.InitExpression = new CodeObjectCreateExpression(typeName);
                method.Statements.Add(declaration);
            }
            else
            {
                fieldReference = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), element.Name);
                method.Statements.Add(new CodeAssignStatement(fieldReference, new CodeObjectCreateExpression(typeName)));
            }

            CodeComHelper.GenerateField <string>(method, fieldReference, source, FrameworkElement.NameProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, FrameworkElement.HeightProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, FrameworkElement.MaxHeightProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, FrameworkElement.MinHeightProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, FrameworkElement.WidthProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, FrameworkElement.MaxWidthProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, FrameworkElement.MinWidthProperty);
            CodeComHelper.GenerateField <object>(method, fieldReference, source, FrameworkElement.TagProperty);
            CodeComHelper.GenerateField <bool>(method, fieldReference, source, FrameworkElement.IsEnabledProperty);
            CodeComHelper.GenerateField <bool>(method, fieldReference, source, FrameworkElement.IsHitTestVisibleProperty);
            CodeComHelper.GenerateField <bool>(method, fieldReference, source, FrameworkElement.SnapsToDevicePixelsProperty);
            CodeComHelper.GenerateField <bool>(method, fieldReference, source, UIElement.FocusableProperty);
            CodeComHelper.GenerateEnumField <Visibility>(method, fieldReference, source, FrameworkElement.VisibilityProperty);
            CodeComHelper.GenerateThicknessField(method, fieldReference, source, FrameworkElement.MarginProperty);
            CodeComHelper.GenerateEnumField <HorizontalAlignment>(method, fieldReference, source, FrameworkElement.HorizontalAlignmentProperty);
            CodeComHelper.GenerateEnumField <VerticalAlignment>(method, fieldReference, source, FrameworkElement.VerticalAlignmentProperty);
            CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, FrameworkElement.StyleProperty);
            CodeComHelper.GenerateToolTipField(classType, method, fieldReference, source, FrameworkElement.ToolTipProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, FrameworkElement.OpacityProperty);

            if (element.Cursor != null)
            {
                CursorType cursorType = (CursorType)Enum.Parse(typeof(CursorType), element.Cursor.ToString());
                CodeComHelper.GenerateEnumField(method, fieldReference, "CursorType", typeof(CursorType).Name, cursorType.ToString());
            }

            if (element.Triggers.Count > 0)
            {
                string parentName = element.Name;
                GenerateTriggers(classType, method, element, typeName, fieldReference, parentName);
            }

            if (element.InputBindings.Count > 0)
            {
                GenerateInputBindings(method, element, fieldReference);
            }

            var behaviors = Interaction.GetBehaviors(element);

            if (behaviors.Count > 0)
            {
                GenerateBehaviors(behaviors, classType, method, element, fieldReference);
            }

            return(fieldReference);
        }
        /// <summary>
        /// Generates control fields
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="classType">Type of the class.</param>
        /// <param name="method">The method.</param>
        /// <param name="generateField">if set to <c>true</c> [generate field].</param>
        /// <returns></returns>
        public virtual CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField)
        {
            DataGridColumn column   = source as DataGridColumn;
            string         typeName = source.GetType().Name;
            string         name     = ColumnName;

            CodeExpression    fieldReference             = new CodeVariableReferenceExpression(name);
            CodeTypeReference variableType               = new CodeTypeReference(typeName);
            CodeVariableDeclarationStatement declaration = new CodeVariableDeclarationStatement(variableType, name);

            declaration.InitExpression = new CodeObjectCreateExpression(typeName);
            method.Statements.Add(declaration);

            if (CodeComHelper.IsValidForFieldGenerator(source.ReadLocalValue(DataGridColumn.WidthProperty)))
            {
                DataGridLength value = (DataGridLength)source.GetValue(DataGridColumn.WidthProperty);
                CodeTypeReferenceExpression dglType = new CodeTypeReferenceExpression("DataGridLength");

                switch (value.UnitType)
                {
                case DataGridLengthUnitType.Auto:
                    // AUTO is default value so we don't need to generate any code
                    break;

                case DataGridLengthUnitType.Pixel:
                    method.Statements.Add(new CodeAssignStatement(
                                              new CodeFieldReferenceExpression(fieldReference, DataGridColumn.WidthProperty.Name),
                                              new CodePrimitiveExpression((float)value.Value)));
                    break;

                case DataGridLengthUnitType.SizeToCells:
                    method.Statements.Add(new CodeAssignStatement(
                                              new CodeFieldReferenceExpression(fieldReference, DataGridColumn.WidthProperty.Name),
                                              new CodeFieldReferenceExpression(dglType, "SizeToCells")));
                    break;

                case DataGridLengthUnitType.SizeToHeader:
                    method.Statements.Add(new CodeAssignStatement(
                                              new CodeFieldReferenceExpression(fieldReference, DataGridColumn.WidthProperty.Name),
                                              new CodeFieldReferenceExpression(dglType, "SizeToHeader")));
                    break;

                case DataGridLengthUnitType.Star:
                    method.Statements.Add(new CodeAssignStatement(
                                              new CodeFieldReferenceExpression(fieldReference, DataGridColumn.WidthProperty.Name),
                                              new CodeObjectCreateExpression("DataGridLength",
                                                                             new CodePrimitiveExpression(Convert.ToSingle(value.Value)),
                                                                             new CodeFieldReferenceExpression(new CodeTypeReferenceExpression("DataGridLengthUnitType"), "Star"))));
                    break;

                default:
                    break;
                }
            }

            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, DataGridColumn.MaxWidthProperty);
            CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, DataGridColumn.MinWidthProperty);
            CodeComHelper.GenerateEnumField <Visibility>(method, fieldReference, source, DataGridColumn.VisibilityProperty);
            CodeComHelper.GenerateField <string>(method, fieldReference, source, DataGridColumn.SortMemberPathProperty);

            UIElement header = column.Header as UIElement;

            if (header != null)
            {
                TypeGenerator  headerGenerator = new TypeGenerator();
                CodeExpression headerExpr      = headerGenerator.ProcessGenerators(header, classType, method, false);

                method.Statements.Add(new CodeAssignStatement(
                                          new CodeFieldReferenceExpression(fieldReference, "Header"), headerExpr));
            }
            else if (column.Header != null)
            {
                CodeComHelper.GenerateField <object>(method, fieldReference, source, DataGridColumn.HeaderProperty);
                // TODO content can be another class, so this will not work
            }

            CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, DataGridColumn.HeaderStyleProperty, name + "_h");

            return(fieldReference);
        }