예제 #1
0
        /// <summary>
        /// Create visual object of the Legend
        /// </summary>
        internal void CreateVisualObject()
        {
            if (!(Boolean)Enabled)
            {
                Visual = null;
                return;
            }

            ElementData tag = new ElementData { Element = this, VisualElementName = "Legend" };

            Visual = new Border() { Tag = tag };
            Grid innerGrid = new Grid() { Tag = tag };

            (Visual as Border).Child = innerGrid;

            LegendContainer = new StackPanel() { Tag = tag };

            if (!String.IsNullOrEmpty(Title))
            {
                Title legendTitle = new Title();
                ApplyFontProperty(legendTitle);

                if (TitleBackground != null)
                    legendTitle.InternalBackground = TitleBackground;

                legendTitle.InternalHorizontalAlignment = TitleAlignmentX;
                legendTitle.InternalVerticalAlignment = VerticalAlignment.Top;
                legendTitle.TextAlignment = TitleTextAlignment;

                legendTitle.CreateVisualObject(tag);

                legendTitle.Measure(new Size(Double.MaxValue, Double.MaxValue));

                if (legendTitle.DesiredSize.Width > InternalMaxWidth)
                    legendTitle.Visual.Width = InternalMaxWidth;

                LegendContainer.Children.Add(legendTitle.Visual);
            }

            Grid legendContent = CreateLegendContent();
            legendContent.Tag = tag;

            LegendContainer.Children.Add(legendContent);

            LegendContainer.VerticalAlignment = VerticalAlignment.Center;
            LegendContainer.HorizontalAlignment = HorizontalAlignment.Stretch;

            ApplyVisualProperty();

            innerGrid.Children.Add(LegendContainer);

            Visual.Cursor = this.Cursor;
            Visual.Measure(new Size(Double.MaxValue, Double.MaxValue));

            if (!Double.IsPositiveInfinity(InternalMaxHeight) && InternalMaxHeight < Visual.DesiredSize.Height)
                Visual.Height = InternalMaxHeight;
            else 
                Visual.Height = Visual.DesiredSize.Height;

            if (!Double.IsPositiveInfinity(InternalMaxWidth) && InternalMaxWidth < Visual.DesiredSize.Width + InternalPadding.Left)
                Visual.Width = InternalMaxWidth;
            else if (Layout == Layouts.GridLayout)
                Visual.Width = Visual.DesiredSize.Width + InternalPadding.Left;
            else
                Visual.Width = Visual.DesiredSize.Width;

            PlotArea plotArea = (Chart as Chart).PlotArea;

            RectangleGeometry rectGeo = new RectangleGeometry();
            rectGeo.Rect = new Rect(InternalBorderThickness.Left, InternalBorderThickness.Top, Visual.Width - InternalBorderThickness.Left - InternalBorderThickness.Right, Visual.Height - InternalBorderThickness.Top - InternalBorderThickness.Bottom);
            rectGeo.RadiusX = CornerRadius.TopLeft;
            rectGeo.RadiusY = CornerRadius.TopRight;
            LegendContainer.Clip = rectGeo;

            ApplyShadow(innerGrid);

            if (VerticalAlignment == System.Windows.VerticalAlignment.Bottom && (HorizontalAlignment == System.Windows.HorizontalAlignment.Center
                || HorizontalAlignment == System.Windows.HorizontalAlignment.Left || HorizontalAlignment == System.Windows.HorizontalAlignment.Right
                || HorizontalAlignment == System.Windows.HorizontalAlignment.Stretch))
                Visual.Margin = new Thickness(0, DEFAULT_MARGIN, 0, 0);
            else if (VerticalAlignment == System.Windows.VerticalAlignment.Top && (HorizontalAlignment == System.Windows.HorizontalAlignment.Center
                || HorizontalAlignment == System.Windows.HorizontalAlignment.Left || HorizontalAlignment == System.Windows.HorizontalAlignment.Right
                || HorizontalAlignment == System.Windows.HorizontalAlignment.Stretch))
                Visual.Margin = new Thickness(0, 0, 0, DEFAULT_MARGIN);
            else if (HorizontalAlignment == System.Windows.HorizontalAlignment.Left && (VerticalAlignment == System.Windows.VerticalAlignment.Center
                || VerticalAlignment == System.Windows.VerticalAlignment.Stretch))
                Visual.Margin = new Thickness(0, 0, DEFAULT_MARGIN, 0);
            else if (HorizontalAlignment == System.Windows.HorizontalAlignment.Right && (VerticalAlignment == System.Windows.VerticalAlignment.Center
                || VerticalAlignment == System.Windows.VerticalAlignment.Stretch))
                Visual.Margin = new Thickness(DEFAULT_MARGIN, 0, 0, 0);
        }
예제 #2
0
파일: Legend.cs 프로젝트: tdhieu/openvss
        /// <summary>
        /// Create visual object of the Legend
        /// </summary>
        internal void CreateVisualObject()
        {
            if (!(Boolean)Enabled)
            {
                Visual = null;
                return;
            }

            ElementData tag = new ElementData { Element = this, VisualElementName = "Legend" };

            Visual = new Border() { Tag = tag };
            Grid innerGrid = new Grid() { Tag = tag };
            (Visual as Border).Child = innerGrid;

            LegendContainer = new StackPanel() { Tag = tag };

            if (!String.IsNullOrEmpty(Title))
            {
                Title legendTitle = new Title();
                ApplyFontProperty(legendTitle);

                if (TitleBackground != null)
                    legendTitle.InternalBackground = TitleBackground;

                legendTitle.InternalHorizontalAlignment = TitleAlignmentX;
                legendTitle.InternalVerticalAlignment = VerticalAlignment.Top;
                legendTitle.TextAlignment = TitleTextAlignment;

                legendTitle.CreateVisualObject(tag);

                legendTitle.Measure(new Size(Double.MaxValue, Double.MaxValue));

                if (legendTitle.DesiredSize.Width > InternalMaxWidth)
                    legendTitle.Visual.Width = InternalMaxWidth;

                LegendContainer.Children.Add(legendTitle.Visual);
            }

            Grid legendContent = CreateLegendContent();
            legendContent.Tag = tag;

            LegendContainer.Children.Add(legendContent);

            LegendContainer.VerticalAlignment = VerticalAlignment.Center;
            LegendContainer.HorizontalAlignment = HorizontalAlignment.Center;

            ApplyVisualProperty();

            innerGrid.Children.Add(LegendContainer);

            Visual.Cursor = this.Cursor;
            Visual.Measure(new Size(Double.MaxValue, Double.MaxValue));

            if (!Double.IsPositiveInfinity(InternalMaxHeight) && InternalMaxHeight < Visual.DesiredSize.Height)
                Visual.Height = InternalMaxHeight;
            else
                Visual.Height = Visual.DesiredSize.Height;

            if (!Double.IsPositiveInfinity(InternalMaxWidth) && InternalMaxWidth < Visual.DesiredSize.Width + InternalPadding.Left)
                Visual.Width = InternalMaxWidth;
            else
                Visual.Width = Visual.DesiredSize.Width + InternalPadding.Left;
        }