/// <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);

            Panel panel = source as Panel;

            CodeComHelper.GenerateBrushField(initMethod, fieldReference, source, Panel.BackgroundProperty);
            CodeComHelper.GenerateField <bool>(initMethod, fieldReference, source, Panel.IsItemsHostProperty);

            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);

            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);

            Border border = source as Border;

            CodeComHelper.GenerateBrushField(initMethod, fieldReference, source, Border.BackgroundProperty);
            CodeComHelper.GenerateBrushField(initMethod, fieldReference, source, Border.BorderBrushProperty);
            CodeComHelper.GenerateThicknessField(initMethod, fieldReference, source, Border.BorderThicknessProperty);
            CodeComHelper.GenerateThicknessField(initMethod, fieldReference, source, Border.PaddingProperty);

            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);
        }
        /// <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 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);

            Chart chart = source as Chart;

            CodeComHelper.GenerateField <float>(method, fieldReference, source, Chart.TickmarkLengthProperty);
            CodeComHelper.GenerateField <float>(method, fieldReference, source, Chart.TickmarkThicknessProperty);
            CodeComHelper.GenerateField <float>(method, fieldReference, source, Chart.AxisThicknessProperty);
            CodeComHelper.GenerateBrushField(method, fieldReference, source, Chart.AxisBrushProperty);
            CodeComHelper.GenerateField <bool>(method, fieldReference, source, Chart.AxisVisibleProperty);
            CodeComHelper.GenerateField <float>(method, fieldReference, source, Chart.AxisYMajorUnitProperty);
            CodeComHelper.GenerateField <float>(method, fieldReference, source, Chart.AxisXMajorUnitProperty);
            CodeComHelper.GenerateField <bool>(method, fieldReference, source, Chart.CursorLinesEnabledProperty);
            CodeComHelper.GenerateBrushField(method, fieldReference, source, Chart.CursorLinesBrushProperty);
            CodeComHelper.GenerateField <float>(method, fieldReference, source, Chart.AxisLabelMarginProperty);
            CodeComHelper.GenerateField <bool>(method, fieldReference, source, Chart.AxisLabelsVisibleProperty);
            CodeComHelper.GenerateField <bool>(method, fieldReference, source, Chart.AxisInterlacedProperty);
            CodeComHelper.GenerateBrushField(method, fieldReference, source, Chart.AxisInterlacedBrushProperty);
            CodeComHelper.GenerateField <string>(method, fieldReference, source, Chart.AxisLabelFormatProperty);

            return(fieldReference);
        }