示例#1
0
        public override object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            var width           = (double)values[0];
            var height          = (double)values[1];
            var backgroundColor = (Color)values[2];
            var background      = new LinearGradientBrush()
            {
                StartPoint    = new Point(0, 1),
                EndPoint      = new Point(0, 0),
                GradientStops = new GradientStopCollection()
                {
                    new GradientStop(backgroundColor, 0),
                    new GradientStop(Colors.Transparent, 1),
                }
            };

            background.Freeze();

            var drawingBrush = new DrawingBrush()
            {
                Drawing = new DrawingGroup()
                {
                    Children = new DrawingCollection()
                    {
                        new GeometryDrawing(_stackBrush, null, new RectangleGeometry(new Rect(0, 0, width, height))),
                        new GeometryDrawing(background, null, new RectangleGeometry(new Rect(0, 0, width, height))),
                    }
                }
            };

            drawingBrush.Freeze();
            return(drawingBrush);
        }
示例#2
0
 public static DrawingBrush Get(CardViewModel card)
 {
     try
     {
         if (card?.Id == null || card.Name == null || Cache == null)
         {
             return(new DrawingBrush());
         }
         var cardImageObj = new CardImageObject(card);
         var key          = $"{card.Id}_{cardImageObj.GetHashCode()}";
         if (!Refresh.Contains(card.Id) && Cache.TryGet(key, out var cached))
         {
             return(cached.Image);
         }
         Refresh.Remove(card.Id);
         DrawingBrush image = null;
         Application.Current.Dispatcher.Invoke(() => image = ThemeManager.GetBarImageBuilder(card).Build());
         if (image.CanFreeze)
         {
             image.Freeze();
         }
         cardImageObj = new CardImageObject(image, card);
         Cache.Cache(key, cardImageObj);
         return(cardImageObj.Image);
     }
     catch (Exception ex)
     {
         Log.Error($"Image builder failed: {ex.Message}");
         return(new DrawingBrush());
     }
 }
            public override Brush GetColorDetailsBrush(HsvColor hsvColor)
            {
                GeometryDrawing geomDrawing1 = new GeometryDrawing();

                geomDrawing1.Geometry = new RectangleGeometry(new Rect(0, 0, 100, 100));
                geomDrawing1.Brush    = ColorUtilities.GetHueBrash(1.0, hsvColor.V);
                ((LinearGradientBrush)geomDrawing1.Brush).EndPoint = new Point(1, 0);

                GeometryDrawing geomDrawing2 = new GeometryDrawing();

                geomDrawing2.Geometry = new RectangleGeometry(new Rect(0, 0, 100, 100));
                Color zeroSat = new HsvColor(0.0, 0.0, hsvColor.V).ToRgb();

                geomDrawing2.Brush = new LinearGradientBrush(zeroSat, Color.FromScRgb(0, zeroSat.ScR, zeroSat.ScG, zeroSat.ScB), new Point(0.5, 1), new Point(0.5, 0));

                DrawingGroup rootDrawingGroup = new DrawingGroup();

                rootDrawingGroup.Children.Add(geomDrawing1);
                rootDrawingGroup.Children.Add(geomDrawing2);

                DrawingBrush br = new DrawingBrush(rootDrawingGroup);

                br.Freeze();

                return(br);
            }
示例#4
0
        public ProfilePreview()
        {
            _children = new VisualCollection(this);

            DrawingGroup checkerGroup = new DrawingGroup();

            checkerGroup.Children.Add(new GeometryDrawing(Brushes.White, null, new RectangleGeometry(new Rect(0, 0, 100, 100))));

            DrawingGroup grayGroup = new DrawingGroup();

            grayGroup.Children.Add(new GeometryDrawing(Brushes.LightGray, null, new RectangleGeometry(new Rect(0, 0, 50, 50))));
            grayGroup.Children.Add(new GeometryDrawing(Brushes.LightGray, null, new RectangleGeometry(new Rect(50, 50, 50, 50))));

            checkerGroup.Children.Add(grayGroup);
            checkerGroup.Freeze();

            _checkeredBrush = new DrawingBrush(checkerGroup)
            {
                Viewport      = new Rect(0, 0, 10, 10),
                ViewportUnits = BrushMappingMode.Absolute,
                TileMode      = TileMode.Tile
            };
            _checkeredBrush.Freeze();

            _borderPen = new Pen(Brushes.Black, 1d);

            Focusable = false;
        }
示例#5
0
        /// <summary>
        /// Creates a 45 degree (Topleft to Bottomright tiled DrawingBrush)
        /// </summary>
        /// <param name="Foreground">Linebrush</param>
        /// <param name="Background">Background</param>
        /// <param name="Linethickness">Line thickness</param>
        /// <param name="DistanceLines">Horizontal distance between lines in dibs</param>
        /// <returns></returns>
        public static DrawingBrush Hatch45Brush(Brush Foreground, Brush Background, double Linethickness, double DistanceLines)
        {
            DrawingGroup gg = new DrawingGroup();

            //Background
            gg.Children.Add(new GeometryDrawing(Background, new Pen(Background, Linethickness), new RectangleGeometry(new Rect(0, 0, DistanceLines, DistanceLines))));
            //https://docs.microsoft.com/de-de/dotnet/desktop/wpf/graphics-multimedia/path-markup-syntax
            //Move 0,10
            //Line 0,0 -> 0, 10 -> 10, 0 -> 10, 1 -> 1, 1 -> 1,10
            String LineGen = "M 0,0 " +
                             "L " + USd(DistanceLines) + "," + USd(DistanceLines) + " " +
                             "M " + USd(DistanceLines / 2.0) + "," + USd(-(DistanceLines / 2.0)) + " " +
                             "L " + USd(DistanceLines * 1.5) + "," + USd(DistanceLines / 2.0) + " " +
                             "M " + USd(-(DistanceLines / 2.0)) + "," + USd(DistanceLines / 2.0) + " " +
                             "L " + USd(DistanceLines / 2.0) + "," + USd(DistanceLines * 1.5);

            gg.Children.Add(new GeometryDrawing(Background, new Pen(Foreground, Linethickness),
                                                Geometry.Parse(LineGen)));
            //

            DrawingBrush result = new DrawingBrush(gg);

            result.TileMode      = TileMode.Tile;
            result.Viewport      = new Rect(0, 0, DistanceLines, DistanceLines);
            result.ViewportUnits = BrushMappingMode.Absolute;
            result.Viewbox       = new Rect(0, 0, DistanceLines, DistanceLines);
            result.ViewboxUnits  = BrushMappingMode.Absolute;

            if (result.CanFreeze)
            {
                result.Freeze();
            }

            return(result);
        }
        public static Brush CreateCheckerBrush()
        {
            // from http://msdn.microsoft.com/en-us/library/aa970904.aspx

            DrawingBrush checkerBrush = new DrawingBrush();

            GeometryDrawing backgroundSquare =
                new GeometryDrawing(
                    Brushes.White,
                    null,
                    new RectangleGeometry(new Rect(0, 0, 8, 8)));

            backgroundSquare.Freeze();

            GeometryGroup aGeometryGroup = new GeometryGroup();

            aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(0, 0, 4, 4)));
            aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(4, 4, 4, 4)));

            GeometryDrawing checkers = new GeometryDrawing(Brushes.Black, null, aGeometryGroup);

            checkers.Freeze();

            DrawingGroup checkersDrawingGroup = new DrawingGroup();

            checkersDrawingGroup.Children.Add(backgroundSquare);
            checkersDrawingGroup.Children.Add(checkers);

            checkerBrush.Drawing  = checkersDrawingGroup;
            checkerBrush.Viewport = new Rect(0, 0, 0.5, 0.5);
            checkerBrush.TileMode = TileMode.Tile;

            checkerBrush.Freeze();
            return(checkerBrush);
        }
示例#7
0
        internal static Brush MakeCheckerboardBrush(double checkerboardSize)
        {
            DrawingGroup   drawingGroup   = new DrawingGroup();
            DrawingContext drawingContext = drawingGroup.Open();

            drawingContext.DrawRectangle((Brush)Brushes.White, (Pen)null, new Rect(new Point(0.0, 0.0), new Point(checkerboardSize * 2.0, checkerboardSize * 2.0)));
            for (int index1 = 0; index1 < 2; ++index1)
            {
                for (int index2 = 0; index2 < 2; ++index2)
                {
                    if ((index1 + index2) % 2 == 1)
                    {
                        Point point1 = new Point(checkerboardSize * (double)index1, checkerboardSize * (double)index2);
                        Point point2 = new Point(checkerboardSize * (double)(index1 + 1), checkerboardSize * (double)(index2 + 1));
                        drawingContext.DrawRectangle((Brush)Brushes.LightGray, (Pen)null, new Rect(point1, point2));
                    }
                }
            }
            drawingContext.Close();
            DrawingBrush drawingBrush = new DrawingBrush((Drawing)drawingGroup);

            drawingBrush.ViewportUnits = BrushMappingMode.Absolute;
            drawingBrush.Viewport      = new Rect(0.0, 0.0, checkerboardSize * 2.0, checkerboardSize * 2.0);
            drawingBrush.Stretch       = Stretch.Uniform;
            drawingBrush.TileMode      = TileMode.Tile;
            drawingBrush.Freeze();
            return((Brush)drawingBrush);
        }
示例#8
0
        private static DrawingBrush GetStripeBrush(SolidColorBrush solidBrush)
        {
            Geometry solidGeometry = new RectangleGeometry(new Rect(0, 0, 5, 5));
            Drawing  solidDrawing  = new GeometryDrawing(solidBrush, null, solidGeometry);

            Geometry blankGeometry = new RectangleGeometry(new Rect(5, 0, 5, 5));
            Drawing  blankDrawing  = new GeometryDrawing(Brushes.Transparent, null, blankGeometry);

            DrawingGroup drawing = new DrawingGroup();

            drawing.Children.Add(solidDrawing);
            drawing.Children.Add(blankDrawing);

            DrawingBrush drawingBrush = new DrawingBrush(drawing);

            drawingBrush.TileMode      = TileMode.Tile;
            drawingBrush.Stretch       = Stretch.None;
            drawingBrush.ViewportUnits = BrushMappingMode.Absolute;

            drawingBrush.Viewport = new Rect(0, 0, 4, 2);

            drawingBrush.Freeze();

            return(drawingBrush);
        }
            public override Brush GetColorDetailsBrush(HsvColor hsvColor)
            {
                Color hueColor = new HsvColor(hsvColor.H, 1, 1).ToRgb();

                GeometryDrawing geomDrawing1 = new GeometryDrawing();

                geomDrawing1.Geometry = new RectangleGeometry(new Rect(0, 0, 100, 100));
                geomDrawing1.Brush    = new LinearGradientBrush(Colors.Black, hueColor, new Point(0.5, 1), new Point(0.5, 0));


                GeometryDrawing geomDrawing2 = new GeometryDrawing();

                geomDrawing2.Geometry = new RectangleGeometry(new Rect(0, 0, 100, 100));
                geomDrawing2.Brush    = new LinearGradientBrush(Colors.White, Colors.Black, new Point(0.5, 0), new Point(0.5, 1));

                DrawingGroup drawingGroup1 = new DrawingGroup();

                drawingGroup1.Children.Add(geomDrawing2);
                drawingGroup1.OpacityMask = new LinearGradientBrush(Color.FromScRgb(1, 0, 0, 0), Color.FromScRgb(0, 0, 0, 0), new Point(0, 0.5), new Point(1, 0.5));


                DrawingGroup rootDrawingGroup = new DrawingGroup();

                rootDrawingGroup.Children.Add(geomDrawing1);
                rootDrawingGroup.Children.Add(drawingGroup1);

                DrawingBrush br = new DrawingBrush(rootDrawingGroup);

                br.Freeze();

                return(br);
            }
示例#10
0
        private static Brush CreateFallbackBrush( )
        {
            var line    = Geometry.Parse("M0,0 L16,16 M8,-8 L24,8 M-8,8 L8,24");
            var pen     = new Pen(Brushes.Crimson, 1);
            var drawing = new GeometryDrawing(null, pen, line);
            var brush   = new DrawingBrush(drawing)
            {
                TileMode = TileMode.Tile
            };

            brush.Viewport      = brush.Viewbox = new Rect(0, 0, 16, 16);
            brush.ViewportUnits = brush.ViewboxUnits = BrushMappingMode.Absolute;

            brush.Freeze( );

            return(brush);
        }
示例#11
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            Brush      brush1 = (Brush)null;
            ColorModel source = value as ColorModel;

            if (source != null)
            {
                ColorModel model = new ColorModel(source);
                model.ScA = 1f;
                this.UpdateModelForGradientMin(model);
                GradientStop gradientStop1 = new GradientStop(model.Color, 0.0);
                gradientStop1.Freeze();
                this.UpdateModelForGradientMax(model);
                GradientStop gradientStop2 = new GradientStop(model.Color, 1.0);
                gradientStop2.Freeze();
                GradientStopCollection gradientStopCollection = new GradientStopCollection(2);
                gradientStopCollection.Add(gradientStop1);
                gradientStopCollection.Add(gradientStop2);
                gradientStopCollection.Freeze();
                LinearGradientBrush linearGradientBrush = new LinearGradientBrush();
                linearGradientBrush.StartPoint    = new Point(0.0, 0.0);
                linearGradientBrush.EndPoint      = new Point(1.0, 0.0);
                linearGradientBrush.GradientStops = gradientStopCollection;
                linearGradientBrush.Freeze();
                brush1 = (Brush)linearGradientBrush;
                Brush brush2 = parameter as Brush;
                if (brush2 != null)
                {
                    brush2.Freeze();
                    RectangleGeometry rectangleGeometry = new RectangleGeometry(new Rect(0.0, 0.0, 100.0, 10.0));
                    rectangleGeometry.Freeze();
                    GeometryDrawing geometryDrawing1 = new GeometryDrawing(brush2, (Pen)null, (Geometry)rectangleGeometry);
                    brush2.Freeze();
                    GeometryDrawing geometryDrawing2 = new GeometryDrawing(brush1, (Pen)null, (Geometry)rectangleGeometry);
                    geometryDrawing2.Freeze();
                    DrawingGroup drawingGroup = new DrawingGroup();
                    drawingGroup.Children.Add((Drawing)geometryDrawing1);
                    drawingGroup.Children.Add((Drawing)geometryDrawing2);
                    drawingGroup.Freeze();
                    DrawingBrush drawingBrush = new DrawingBrush((Drawing)drawingGroup);
                    drawingBrush.Freeze();
                    brush1 = (Brush)drawingBrush;
                }
            }
            return((object)brush1);
        }
        // Token: 0x060077B7 RID: 30647 RVA: 0x002228D0 File Offset: 0x00220AD0
        internal InkCanvasSelectionAdorner(UIElement adornedElement) : base(adornedElement)
        {
            this._adornerBorderPen = new Pen(Brushes.Black, 1.0);
            DoubleCollection doubleCollection = new DoubleCollection();

            doubleCollection.Add(4.5);
            doubleCollection.Add(4.5);
            this._adornerBorderPen.DashStyle = new DashStyle(doubleCollection, 2.25);
            this._adornerBorderPen.DashCap   = PenLineCap.Flat;
            this._adornerBorderPen.Freeze();
            this._adornerPenBrush = new Pen(new SolidColorBrush(Color.FromRgb(132, 146, 222)), 1.0);
            this._adornerPenBrush.Freeze();
            this._adornerFillBrush = new LinearGradientBrush(Color.FromRgb(240, 242, byte.MaxValue), Color.FromRgb(180, 207, 248), 45.0);
            this._adornerFillBrush.Freeze();
            DrawingGroup   drawingGroup   = new DrawingGroup();
            DrawingContext drawingContext = null;

            try
            {
                drawingContext = drawingGroup.Open();
                drawingContext.DrawRectangle(Brushes.Transparent, null, new Rect(0.0, 0.0, 1.0, 1.0));
                drawingContext.DrawLine(new Pen(Brushes.Black, 0.16)
                {
                    StartLineCap = PenLineCap.Square,
                    EndLineCap   = PenLineCap.Square
                }, new Point(1.0, 0.0), new Point(0.0, 1.0));
            }
            finally
            {
                if (drawingContext != null)
                {
                    drawingContext.Close();
                }
            }
            drawingGroup.Freeze();
            DrawingBrush drawingBrush = new DrawingBrush(drawingGroup);

            drawingBrush.TileMode      = TileMode.Tile;
            drawingBrush.Viewport      = new Rect(0.0, 0.0, 6.0, 6.0);
            drawingBrush.ViewportUnits = BrushMappingMode.Absolute;
            drawingBrush.Freeze();
            this._hatchPen = new Pen(drawingBrush, 6.0);
            this._hatchPen.Freeze();
            this._elementsBounds = new List <Rect>();
            this._strokesBounds  = Rect.Empty;
        }
示例#13
0
文件: Map.cs 项目: hnjm/Discarta
        private async void VisualExtentValuesChanged(object sender, PropertyChangedEventArgs e)
        {
            if (e.PropertyName == string.Empty || e.PropertyName == nameof(Extent.ZoomLevel))
            {
                PanelExtent = new Rect(Projection.FullMapSizeFor(Extent.ZoomLevel));

                // Measurements only change when the zoom level changes.  Screen size affects the visual port,
                // and GeoArea affects the geographic area under the map
                InvalidateMeasure();
            }

            ScrollOwner?.InvalidateScrollInfo();
            InvalidateArrange();

            foreach (var child in InternalChildren.OfType <UIElement>().Where(c => !(c is MapLayer)).ToList())
            {
                Children.Remove(child);
            }

            var tiles = tileManager.GetTilesForArea(Projection, Extent).ToList();

            while (tiles.Any())
            {
                await Task.WhenAny(tiles);

                foreach (var finishedDrawing in tiles.Where(t => t.IsCompleted).ToList())
                {
                    var tileContent = await finishedDrawing;
                    var visual      = new Rectangle();
                    Geo.SetArea(visual, Geo.GetArea(tileContent));

                    var brush = new DrawingBrush
                    {
                        Drawing = tileContent,
                        Stretch = Stretch.Fill
                    };

                    brush.Freeze();
                    visual.Fill = brush;
                    SetZIndex(visual, int.MaxValue);

                    Children.Add(visual);
                    tiles.Remove(finishedDrawing);
                }
            }
        }
示例#14
0
 public static DrawingBrush CreateDrawingBrushFromStream(Stream stream, string resourceName)
 {
     try
     {
         BitmapImage bitmapImage = new BitmapImage();
         bitmapImage.BeginInit();
         bitmapImage.StreamSource = stream;
         bitmapImage.EndInit();
         DrawingBrush drawingBrush = new DrawingBrush((Drawing) new ImageDrawing((ImageSource)bitmapImage, new Rect(new Size(bitmapImage.Width, bitmapImage.Height))));
         AutomationElement.SetId((DependencyObject)drawingBrush, resourceName);
         drawingBrush.Freeze();
         return(drawingBrush);
     }
     catch (Exception ex)
     {
     }
     return((DrawingBrush)null);
 }
示例#15
0
        DrawingBrush CreateDrawingBrush(Brush brush)
        {
            DrawingBrush db = new DrawingBrush()
            {
                TileMode      = TileMode.Tile,
                ViewboxUnits  = BrushMappingMode.Absolute,
                ViewportUnits = BrushMappingMode.Absolute,
            };

            if (IsHorizontal)
            {
                db.Viewbox  = new Rect(0, 0, 4, 5);
                db.Viewport = new Rect(0, 0, 4, 5);
                db.Drawing  = new GeometryDrawing {
                    Brush    = brush,
                    Geometry = new GeometryGroup {
                        Children =
                        {
                            new RectangleGeometry(new Rect(0, 0, 1, 1)),
                            new RectangleGeometry(new Rect(0, 4, 1, 1)),
                            new RectangleGeometry(new Rect(2, 2, 1, 1))
                        }
                    }
                };
            }
            else
            {
                db.Viewbox  = new Rect(0, 0, 5, 4);
                db.Viewport = new Rect(0, 0, 5, 4);
                db.Drawing  = new GeometryDrawing {
                    Brush    = brush,
                    Geometry = new GeometryGroup {
                        Children =
                        {
                            new RectangleGeometry(new Rect(0, 0, 1, 1)),
                            new RectangleGeometry(new Rect(4, 0, 1, 1)),
                            new RectangleGeometry(new Rect(2, 2, 1, 1))
                        }
                    }
                };
            }
            db.Freeze();
            return(db);
        }
        public override object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            var width           = (double)values[0];
            var height          = (double)values[1];
            var backgroundColor = values[2] as Color?;
            var borderBrush     = values[3] as Brush;

            if (backgroundColor == null)
            {
                var nullBrush = new DrawingBrush()
                {
                    Drawing = new DrawingGroup()
                    {
                        Children = new DrawingCollection()
                        {
                            new GeometryDrawing(null, new Pen(borderBrush, 1.5), new LineGeometry(new Point(0, 0), new Point(width, height))),
                            new GeometryDrawing(null, new Pen(borderBrush, 1.5), new LineGeometry(new Point(0, height), new Point(width, 0))),
                        }
                    }
                };
                nullBrush.Freeze();
                return(nullBrush);
            }
            var background = new SolidColorBrush((Color)backgroundColor);

            background.Freeze();

            var drawingBrush = new DrawingBrush()
            {
                Drawing = new DrawingGroup()
                {
                    Children = new DrawingCollection()
                    {
                        new GeometryDrawing(_stackBrush, null, new RectangleGeometry(new Rect(1, 1, Math.Max(0, width - 2), Math.Max(0, height - 2)))),
                        new GeometryDrawing(background, null, new RectangleGeometry(new Rect(0, 0, width, height))),
                    }
                }
            };

            drawingBrush.Freeze();
            return(drawingBrush);
        }
示例#17
0
        private DrawingBrush CreateBrush()
        {
            var half  = BlockSize / 2;
            var brush = new DrawingBrush();

            brush.Stretch       = Stretch.None;
            brush.TileMode      = TileMode.Tile;
            brush.ViewportUnits = BrushMappingMode.Absolute;
            brush.Viewport      = new Rect(0, 0, BlockSize, BlockSize);
            var drawingGroup = new DrawingGroup();

            drawingGroup.Children.Add(new GeometryDrawing(Background, null, new RectangleGeometry(new Rect(0, 0, BlockSize, BlockSize))));
            var geometryGroup = new GeometryGroup();

            geometryGroup.Children.Add(new RectangleGeometry(new Rect(0, 0, half, half)));
            geometryGroup.Children.Add(new RectangleGeometry(new Rect(half, half, half, half)));
            drawingGroup.Children.Add(new GeometryDrawing(Foreground, null, geometryGroup));
            brush.Drawing = drawingGroup;
            brush.Freeze();
            return(brush);
        }
示例#18
0
        /// <summary>
        /// Recreates the window mask.
        /// </summary>
        private void RecreateWindowMask()
        {
            Rect   windowRect = GetWindowShape();
            double width      = windowRect.Width;
            double height     = windowRect.Height;
            double left       = windowRect.X;
            double top        = windowRect.Y;

            // Add top left and bottom right marker so the final image will have the size of the screen.
            Rect[] rects = new Rect[] {
                new Rect(0, 0, 1, 1),
                new Rect(maxScreenWidth - 1, maxScreenHeight - 1, 1, 1),
                new Rect(left, top, 20, 60),
                new Rect(left + width - 20, top, 20, 60),
                new Rect(left, top + height - 60, 20, 60),
                new Rect(left + width - 20, top + height - 60, 20, 60),
                new Rect(left + 20, top, Math.Max(0, width - 40), height),
                new Rect(left, top + 60, width, Math.Max(0, height - 120)),
            };

            var drawings = new DrawingGroup();

            for (var i = 0; i < rects.Length; i++)
            {
                ImageDrawing drawing = new ImageDrawing();
                drawing.Rect        = rects[i];
                drawing.ImageSource = windowImages[i];
                drawings.Children.Add(drawing);
            }

            var windowImage = new DrawingImage(drawings);

            // Improve performance by freezing.
            windowImage.Freeze();
            var maskDrawing = new ImageDrawing(windowImage, new Rect(-(maxScreenWidth - width) / 2, -(maxScreenHeight - height) / 2, maxScreenWidth, maxScreenHeight));

            maskDrawing.Freeze();
            windowMaskBrush = new DrawingBrush(maskDrawing);
            windowMaskBrush.Freeze();
        }
示例#19
0
        internal static Brush GetBrush(IconKind iconKind)
        {
            if (Brushes.ContainsKey(iconKind))
            {
                return(Brushes[iconKind]);
            }
            Drawing drawing = null;

            if (Instance.Contains(iconKind))
            {
                drawing = Instance[iconKind] as Drawing;
            }
            else
            {
                drawing = GetDrawing(iconKind);
            }
            var brush = new DrawingBrush(drawing);

            brush.Freeze();
            Brushes.Add(iconKind, brush);
            return(brush);
        }
示例#20
0
        private static DrawingBrush CreateDefaultDrawingBrush()
        {
            DrawingBrush drawingBrush = new DrawingBrush((System.Windows.Media.Drawing) new DrawingGroup()
            {
                Children =
                {
                    (System.Windows.Media.Drawing) new GeometryDrawing()
                    {
                        Brush    = (Brush)Brushes.LightGray,
                        Geometry = (System.Windows.Media.Geometry) new RectangleGeometry(new Rect(0.0, 0.0, 20.0, 20.0))
                    },
                    (System.Windows.Media.Drawing) new GeometryDrawing()
                    {
                        Brush    = (Brush)Brushes.Black,
                        Geometry = (System.Windows.Media.Geometry) new EllipseGeometry(new Point(0.0, 0.0), 10.0, 10.0)
                    },
                    (System.Windows.Media.Drawing) new GeometryDrawing()
                    {
                        Brush    = (Brush)Brushes.Black,
                        Geometry = (System.Windows.Media.Geometry) new EllipseGeometry(new Point(20.0, 20.0), 10.0, 10.0)
                    },
                    (System.Windows.Media.Drawing) new GeometryDrawing()
                    {
                        Brush    = (Brush)Brushes.White,
                        Geometry = (System.Windows.Media.Geometry) new EllipseGeometry(new Point(20.0, 0.0), 10.0, 10.0)
                    },
                    (System.Windows.Media.Drawing) new GeometryDrawing()
                    {
                        Brush    = (Brush)Brushes.White,
                        Geometry = (System.Windows.Media.Geometry) new EllipseGeometry(new Point(0.0, 20.0), 10.0, 10.0)
                    }
                }
            });

            drawingBrush.Viewbox      = new Rect(0.0, 0.0, 20.0, 20.0);
            drawingBrush.ViewboxUnits = BrushMappingMode.Absolute;
            drawingBrush.Freeze();
            return(drawingBrush);
        }
        public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var backgroundColor = (Color)value;
            var background      = new SolidColorBrush(backgroundColor);

            background.Freeze();

            var drawingBrush = new DrawingBrush()
            {
                Drawing = new DrawingGroup()
                {
                    Children = new DrawingCollection()
                    {
                        new GeometryDrawing(background, null, new RectangleGeometry(new System.Windows.Rect(0, 0, 1, 1))),
                        new GeometryDrawing(_firstStackBrush, null, new RectangleGeometry(new System.Windows.Rect(0, 0, 1, 1))),
                        new GeometryDrawing(_secondStackBrush, null, new RectangleGeometry(new System.Windows.Rect(0, 0, 1, 1))),
                    }
                }
            };

            drawingBrush.Freeze();
            return(drawingBrush);
        }
示例#22
0
        private static Brush CreateBrush(FrameworkElement frameworkElement)
        {
            var size = (Size)frameworkElement.GetValue(GridSizeProperty);
            var pen  = new Pen(Brushes.DarkGray, 0.1);

            var blackBrush        = new DrawingBrush();
            var rectangleGeometry = new RectangleGeometry(new Rect(size));

            pen.Freeze();
            var geometryDrawing = new GeometryDrawing(null, pen, rectangleGeometry);

            blackBrush.Drawing = geometryDrawing;

            geometryDrawing.Freeze();

            // Set Viewport and TileMode
            blackBrush.Viewport      = new Rect(size);
            blackBrush.ViewportUnits = BrushMappingMode.Absolute;
            blackBrush.TileMode      = TileMode.Tile;

            blackBrush.Freeze();

            return(blackBrush);
        }
示例#23
0
        /// <summary>
        /// Returns a square tiled DrawingBrush
        /// Does not work nicely with < 1 Linethickness atm
        /// </summary>
        /// <param name="Foreground">Line brush</param>
        /// <param name="Background">Background brush</param>
        /// <param name="Linethickness">Line Thickness</param>
        /// <returns></returns>
        public static DrawingBrush HatchRectBrush(Brush Foreground, Brush Background, double Linethickness)
        {
            DrawingGroup gg = new DrawingGroup();

            //Background
            gg.Children.Add(new GeometryDrawing(Background, new Pen(Foreground, Linethickness), new RectangleGeometry(new Rect(0, 0, 10, 10))));
            //https://docs.microsoft.com/de-de/dotnet/desktop/wpf/graphics-multimedia/path-markup-syntax
            //Move 0,10
            //Line 0,0 -> 0, 10 -> 10, 0 -> 10, 1 -> 1, 1 -> 1,10
            //gg.Children.Add(new GeometryDrawing(Background, new Pen(Foreground, Linethickness), Geometry.Parse("M0, 10 L 0, 0 10, 0 10, 1 1, 1 1, 10")));

            DrawingBrush result = new DrawingBrush(gg);

            result.TileMode      = TileMode.Tile;
            result.Viewport      = new Rect(0, 0, 10, 10);
            result.ViewportUnits = BrushMappingMode.Absolute;

            if (result.CanFreeze)
            {
                result.Freeze();
            }

            return(result);
        }
示例#24
0
        public static DrawingBrush GetDrawingForIcon(Octicon icon, Brush colorBrush, string theme = null)
        {
            string name = icon.ToString();

            if (theme != null)
            {
                name += "_" + theme;
            }
            if (drawingBrushes.ContainsKey(name))
            {
                return(drawingBrushes[name]);
            }

            var geometry = OcticonPath.GetGeometryForIcon(icon);

            geometry.Freeze();

            var drawing = new GeometryDrawing()
            {
                Brush    = colorBrush,
                Geometry = geometry
            };

            drawing.Freeze();

            var brush = new DrawingBrush()
            {
                Drawing = drawing,
                Stretch = Stretch.Uniform
            };

            brush.Freeze();

            drawingBrushes.Add(name, brush);
            return(brush);
        }
示例#25
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="adornedElement">The adorned InkCanvas</param>
        internal InkCanvasSelectionAdorner(UIElement adornedElement)
            : base(adornedElement)
        {
            Debug.Assert(adornedElement is InkCanvasInnerCanvas,
                         "InkCanvasSelectionAdorner only should be used by InkCanvas internally");

            // Initialize the internal data.
            _adornerBorderPen = new Pen(Brushes.Black, 1.0);
            DoubleCollection dashes = new DoubleCollection();

            dashes.Add(4.5);
            dashes.Add(4.5);
            _adornerBorderPen.DashStyle = new DashStyle(dashes, 2.25);
            _adornerBorderPen.DashCap   = PenLineCap.Flat;
            _adornerBorderPen.Freeze();

            _adornerPenBrush = new Pen(new SolidColorBrush(Color.FromRgb(132, 146, 222)), 1);
            _adornerPenBrush.Freeze();

            _adornerFillBrush = new LinearGradientBrush(Color.FromRgb(240, 242, 255), //start color
                                                        Color.FromRgb(180, 207, 248), //end color
                                                        45f                           //angle
                                                        );
            _adornerFillBrush.Freeze();

            // Create a hatch pen
            DrawingGroup   hatchDG = new DrawingGroup();
            DrawingContext dc      = null;

            try
            {
                dc = hatchDG.Open();

                dc.DrawRectangle(
                    Brushes.Transparent,
                    null,
                    new Rect(0.0, 0.0, 1f, 1f));

                Pen squareCapPen = new Pen(Brushes.Black, LineThickness);
                squareCapPen.StartLineCap = PenLineCap.Square;
                squareCapPen.EndLineCap   = PenLineCap.Square;

                dc.DrawLine(squareCapPen,
                            new Point(1f, 0f), new Point(0f, 1f));
            }
            finally
            {
                if (dc != null)
                {
                    dc.Close();
                }
            }
            hatchDG.Freeze();

            DrawingBrush tileBrush = new DrawingBrush(hatchDG);

            tileBrush.TileMode      = TileMode.Tile;
            tileBrush.Viewport      = new Rect(0, 0, HatchBorderMargin, HatchBorderMargin);
            tileBrush.ViewportUnits = BrushMappingMode.Absolute;
            tileBrush.Freeze();

            _hatchPen = new Pen(tileBrush, HatchBorderMargin);
            _hatchPen.Freeze();

            _elementsBounds = new List <Rect>();
            _strokesBounds  = Rect.Empty;
        }
示例#26
0
        public void BeachBallSphere()
        {
            //Title = "Beachball Sphere";

            // Create Viewport3D as content of window.
            Viewport3D viewport = new Viewport3D();

            Content = viewport;

            // Get the MeshGeometry3D from the GenerateSphere method.
            MeshGeometry3D mesh =
                GenerateSphere(new Point3D(0, 0, 0), 1, 36, 18);

            mesh.Freeze();

            // Define a brush for the sphere.
            Brush[] brushes = new Brush[6] {
                Brushes.Red, Brushes.Blue,
                Brushes.Yellow, Brushes.Orange,
                Brushes.Green, Brushes.White
            };
            DrawingGroup drawgrp = new DrawingGroup();

            for (int i = 0; i < brushes.Length; i++)
            {
                RectangleGeometry rectgeo =
                    new RectangleGeometry(new Rect(10 * i, 0, 10, 60));

                GeometryDrawing geodraw =
                    new GeometryDrawing(brushes[i], null, rectgeo);

                drawgrp.Children.Add(geodraw);
            }
            DrawingBrush drawbrsh = new DrawingBrush(drawgrp);

            drawbrsh.Freeze();

            // Define the GeometryModel3D.
            GeometryModel3D geomod = new GeometryModel3D();

            geomod.Geometry = mesh;
            geomod.Material = new DiffuseMaterial(drawbrsh);

            // Create a ModelVisual3D for the GeometryModel3D.
            ModelVisual3D modvis = new ModelVisual3D();

            modvis.Content = geomod;
            viewport.Children.Add(modvis);

            // Create another ModelVisual3D for light.
            Model3DGroup modgrp = new Model3DGroup();

            modgrp.Children.Add(new AmbientLight(Color.FromRgb(128, 128, 128)));
            modgrp.Children.Add(
                new DirectionalLight(Color.FromRgb(128, 128, 128),
                                     new Vector3D(2, -3, -1)));

            modvis         = new ModelVisual3D();
            modvis.Content = modgrp;
            viewport.Children.Add(modvis);

            // Create the camera.
            PerspectiveCamera cam = new PerspectiveCamera(new Point3D(0, 0, 8),
                                                          new Vector3D(0, 0, -1), new Vector3D(0, 1, 0), 45);

            viewport.Camera = cam;

            // Create a transform for the GeometryModel3D.
            AxisAngleRotation3D axisangle =
                new AxisAngleRotation3D(new Vector3D(1, 1, 0), 0);
            RotateTransform3D rotate = new RotateTransform3D(axisangle);

            geomod.Transform = rotate;

            // Animate the RotateTransform3D.
            DoubleAnimation anima =
                new DoubleAnimation(360, new Duration(TimeSpan.FromSeconds(5)));

            anima.RepeatBehavior = RepeatBehavior.Forever;
            axisangle.BeginAnimation(AxisAngleRotation3D.AngleProperty, anima);
        }
示例#27
0
        public BitmapEffectExample()
        {
            //
            // Create a DrawingGroup
            // that has no BitmapEffect
            //
            PathFigure pLineFigure = new PathFigure();

            pLineFigure.StartPoint = new Point(25, 25);
            PolyLineSegment pLineSegment = new PolyLineSegment();

            pLineSegment.Points.Add(new Point(0, 50));
            pLineSegment.Points.Add(new Point(25, 75));
            pLineSegment.Points.Add(new Point(50, 50));
            pLineSegment.Points.Add(new Point(25, 25));
            pLineSegment.Points.Add(new Point(25, 0));
            pLineFigure.Segments.Add(pLineSegment);
            PathGeometry pGeometry = new PathGeometry();

            pGeometry.Figures.Add(pLineFigure);

            GeometryDrawing drawing1 = new GeometryDrawing(
                Brushes.Lime,
                new Pen(Brushes.Black, 10),
                pGeometry
                );

            GeometryDrawing drawing2 = new GeometryDrawing(
                Brushes.Lime,
                new Pen(Brushes.Black, 2),
                new EllipseGeometry(new Point(10, 10), 5, 5)
                );

            // Create a DrawingGroup
            DrawingGroup drawingGroupWithoutBitmapEffect = new DrawingGroup();

            drawingGroupWithoutBitmapEffect.Children.Add(drawing1);
            drawingGroupWithoutBitmapEffect.Children.Add(drawing2);

            // Use an Image control and a DrawingImage to
            // display the drawing.
            DrawingImage drawingImage01 = new DrawingImage(drawingGroupWithoutBitmapEffect);

            // Freeze the DrawingImage for performance benefits.
            drawingImage01.Freeze();

            Image image01 = new Image();

            image01.Source              = drawingImage01;
            image01.Stretch             = Stretch.None;
            image01.HorizontalAlignment = HorizontalAlignment.Left;

            //
            // Create another DrawingGroup and apply
            // a blur effect to it.
            //

            // Create a clone of the first DrawingGroup.
            DrawingGroup drawingGroupWithBitmapEffect =
                drawingGroupWithoutBitmapEffect.Clone();

            // Create a blur effect.
            BlurBitmapEffect blurEffect = new BlurBitmapEffect();

            blurEffect.Radius = 3.0;

            // Apply it to the drawing group.
            drawingGroupWithBitmapEffect.BitmapEffect = blurEffect;

            // Use another Image control and DrawingImage
            // to display the drawing.
            DrawingImage drawingImage02 = new DrawingImage(drawingGroupWithBitmapEffect);

            // Freeze the DrawingImage for performance benefits.
            drawingImage02.Freeze();

            Image image02 = new Image();

            image02.Source              = drawingImage02;
            image02.Stretch             = Stretch.None;
            image02.HorizontalAlignment = HorizontalAlignment.Left;

            // Create borders around the images and add them to the
            // page.
            Border border01 = new Border();

            border01.BorderBrush       = Brushes.Gray;
            border01.BorderThickness   = new Thickness(1);
            border01.VerticalAlignment = VerticalAlignment.Top;
            border01.Margin            = new Thickness(10);
            border01.Child             = image01;

            Border border02 = new Border();

            border02.BorderBrush       = Brushes.Gray;
            border02.BorderThickness   = new Thickness(1);
            border02.VerticalAlignment = VerticalAlignment.Top;
            border02.Margin            = new Thickness(50, 10, 10, 10);
            border02.Child             = image02;

            StackPanel mainPanel = new StackPanel();

            mainPanel.Orientation         = Orientation.Horizontal;
            mainPanel.HorizontalAlignment = HorizontalAlignment.Left;
            mainPanel.VerticalAlignment   = VerticalAlignment.Top;
            mainPanel.Children.Add(border01);
            mainPanel.Children.Add(border02);

            //
            // Use a DrawingBrush to create a checkered background for the page.
            //
            GeometryDrawing backgroundSquareDrawing =
                new GeometryDrawing(
                    Brushes.White,
                    null,
                    new RectangleGeometry(new Rect(0, 0, 1, 1)));
            GeometryGroup twoRectangles = new GeometryGroup();

            twoRectangles.Children.Add(new RectangleGeometry(new Rect(0, 0, 0.5, 0.5)));
            twoRectangles.Children.Add(new RectangleGeometry(new Rect(0.5, 0.5, 0.5, 0.5)));
            SolidColorBrush squaresBrush =
                new SolidColorBrush(Color.FromArgb(102, 204, 204, 204));

            squaresBrush.Opacity = 0.4;
            GeometryDrawing checkerDrawing =
                new GeometryDrawing(
                    squaresBrush,
                    null,
                    twoRectangles);
            DrawingGroup checkerDrawings = new DrawingGroup();

            checkerDrawings.Children.Add(backgroundSquareDrawing);
            checkerDrawings.Children.Add(checkerDrawing);
            DrawingBrush checkerBrush = new DrawingBrush(checkerDrawings);

            checkerBrush.Viewport      = new Rect(0, 0, 10, 10);
            checkerBrush.ViewportUnits = BrushMappingMode.Absolute;
            checkerBrush.TileMode      = TileMode.Tile;
            checkerBrush.Freeze();

            this.Background = checkerBrush;
            this.Content    = mainPanel;
        }
示例#28
0
        public DrawingBrushExample()
        {
            //
            // Create the Geometry to draw.
            //
            GeometryGroup ellipses = new GeometryGroup();

            ellipses.Children.Add(
                new EllipseGeometry(new Point(50, 50), 45, 20)
                );
            ellipses.Children.Add(
                new EllipseGeometry(new Point(50, 50), 20, 45)
                );

            //
            // Create a GeometryDrawing.
            //
            GeometryDrawing aGeometryDrawing = new GeometryDrawing();

            aGeometryDrawing.Geometry = ellipses;

            // Paint the drawing with a gradient.
            aGeometryDrawing.Brush =
                new LinearGradientBrush(
                    Colors.Blue,
                    Color.FromRgb(204, 204, 255),
                    new Point(0, 0),
                    new Point(1, 1));

            // Outline the drawing with a solid color.
            aGeometryDrawing.Pen = new Pen(Brushes.Black, 10);

            DrawingBrush patternBrush = new DrawingBrush(aGeometryDrawing);

            patternBrush.Viewport = new Rect(0, 0, 0.25, 0.25);
            patternBrush.TileMode = TileMode.Tile;
            patternBrush.Freeze();

            //
            // Create an object to paint.
            //
            Rectangle paintedRectangle = new Rectangle();

            paintedRectangle.Width  = 100;
            paintedRectangle.Height = 100;
            paintedRectangle.Fill   = patternBrush;

            //
            // Place the image inside a border and
            // add it to the page.
            //
            Border exampleBorder = new Border();

            exampleBorder.Child               = paintedRectangle;
            exampleBorder.BorderBrush         = Brushes.Gray;
            exampleBorder.BorderThickness     = new Thickness(1);
            exampleBorder.HorizontalAlignment = HorizontalAlignment.Left;
            exampleBorder.VerticalAlignment   = VerticalAlignment.Top;
            exampleBorder.Margin              = new Thickness(10);

            this.Margin     = new Thickness(20);
            this.Background = Brushes.White;
            this.Content    = exampleBorder;
        }
示例#29
0
        public DrawingGroupGuidelineSetExample()
        {
            //
            // Create a DrawingGroup
            // that has no guideline set
            //
            GeometryDrawing drawing1 = new GeometryDrawing(
                Brushes.Black,
                null,
                new RectangleGeometry(new Rect(0, 20, 30, 80))
                );

            GeometryGroup whiteRectangles = new GeometryGroup();

            whiteRectangles.Children.Add(new RectangleGeometry(new Rect(5.5, 25, 20, 20)));
            whiteRectangles.Children.Add(new RectangleGeometry(new Rect(5.5, 50, 20, 20)));
            whiteRectangles.Children.Add(new RectangleGeometry(new Rect(5.5, 75, 20, 20)));

            GeometryDrawing drawing2 = new GeometryDrawing(
                Brushes.White,
                null,
                whiteRectangles
                );

            // Create a DrawingGroup
            DrawingGroup drawingGroupWithoutGuidelines = new DrawingGroup();

            drawingGroupWithoutGuidelines.Children.Add(drawing1);
            drawingGroupWithoutGuidelines.Children.Add(drawing2);

            // Use an Image control and a DrawingImage to
            // display the drawing.
            DrawingImage drawingImage01 = new DrawingImage(drawingGroupWithoutGuidelines);

            // Freeze the DrawingImage for performance benefits.
            drawingImage01.Freeze();

            Image image01 = new Image();

            image01.Source              = drawingImage01;
            image01.Stretch             = Stretch.None;
            image01.HorizontalAlignment = HorizontalAlignment.Left;
            image01.Margin              = new Thickness(10);

            //
            // Create another DrawingGroup and apply
            // a blur effect to it.
            //

            // Create a clone of the first DrawingGroup.
            DrawingGroup drawingGroupWithGuidelines =
                drawingGroupWithoutGuidelines.Clone();

            // Create a guideline set.
            GuidelineSet guidelines = new GuidelineSet();

            guidelines.GuidelinesX.Add(5.5);
            guidelines.GuidelinesX.Add(25.5);
            guidelines.GuidelinesY.Add(25);
            guidelines.GuidelinesY.Add(50);
            guidelines.GuidelinesY.Add(75);

            // Apply it to the drawing group.
            drawingGroupWithGuidelines.GuidelineSet = guidelines;

            // Use another Image control and DrawingImage
            // to display the drawing.
            DrawingImage drawingImage02 = new DrawingImage(drawingGroupWithGuidelines);

            // Freeze the DrawingImage for performance benefits.
            drawingImage02.Freeze();

            Image image02 = new Image();

            image02.Source              = drawingImage02;
            image02.Stretch             = Stretch.None;
            image02.HorizontalAlignment = HorizontalAlignment.Left;
            image02.Margin              = new Thickness(50, 10, 10, 10);

            StackPanel mainPanel = new StackPanel();

            mainPanel.Orientation         = Orientation.Horizontal;
            mainPanel.HorizontalAlignment = HorizontalAlignment.Left;
            mainPanel.Margin = new Thickness(20);
            mainPanel.Children.Add(image01);
            mainPanel.Children.Add(image02);

            //
            // Use a DrawingBrush to create a grid background.
            //
            GeometryDrawing backgroundRectangleDrawing =
                new GeometryDrawing(
                    Brushes.White,
                    null,
                    new RectangleGeometry(new Rect(0, 0, 1, 1))
                    );
            PolyLineSegment backgroundLine1 = new PolyLineSegment();

            backgroundLine1.Points.Add(new Point(1, 0));
            backgroundLine1.Points.Add(new Point(1, 0.1));
            backgroundLine1.Points.Add(new Point(0, 0.1));
            PathFigure line1Figure = new PathFigure();

            line1Figure.Segments.Add(backgroundLine1);
            PathGeometry backgroundLine1Geometry = new PathGeometry();

            backgroundLine1Geometry.Figures.Add(line1Figure);
            GeometryDrawing backgroundLineDrawing1 = new GeometryDrawing(
                new SolidColorBrush(Color.FromArgb(255, 204, 204, 255)),
                null,
                backgroundLine1Geometry
                );
            PolyLineSegment backgroundLine2 = new PolyLineSegment();

            backgroundLine2.Points.Add(new Point(0, 1));
            backgroundLine2.Points.Add(new Point(0.1, 1));
            backgroundLine2.Points.Add(new Point(0.1, 0));
            PathFigure line2Figure = new PathFigure();

            line2Figure.Segments.Add(backgroundLine2);
            PathGeometry backgroundLine2Geometry = new PathGeometry();

            backgroundLine2Geometry.Figures.Add(line2Figure);
            GeometryDrawing backgroundLineDrawing2 = new GeometryDrawing(
                new SolidColorBrush(Color.FromArgb(255, 204, 204, 255)),
                null,
                backgroundLine2Geometry
                );

            DrawingGroup backgroundGroup = new DrawingGroup();

            backgroundGroup.Children.Add(backgroundRectangleDrawing);
            backgroundGroup.Children.Add(backgroundLineDrawing1);
            backgroundGroup.Children.Add(backgroundLineDrawing2);

            DrawingBrush gridPatternBrush = new DrawingBrush(backgroundGroup);

            gridPatternBrush.Viewport      = new Rect(0, 0, 10, 10);
            gridPatternBrush.ViewportUnits = BrushMappingMode.Absolute;
            gridPatternBrush.TileMode      = TileMode.Tile;
            gridPatternBrush.Freeze();

            Border mainBorder = new Border();

            mainBorder.Background          = gridPatternBrush;
            mainBorder.BorderThickness     = new Thickness(1);
            mainBorder.BorderBrush         = Brushes.Gray;
            mainBorder.HorizontalAlignment = HorizontalAlignment.Left;
            mainBorder.VerticalAlignment   = VerticalAlignment.Top;
            mainBorder.Margin = new Thickness(20);
            mainBorder.Child  = mainPanel;

            //
            // Add the items to the page.
            //
            this.Content    = mainBorder;
            this.Background = Brushes.White;
        }
        public ImageDrawingWithDrawingBrushExample()
        {
            // Create a DrawingGroup to combine the ImageDrawing objects.
            DrawingGroup imageDrawings = new DrawingGroup();

            // Create a 100 by 100 image with an upper-left point of (75,75).
            ImageDrawing bigKiwi = new ImageDrawing();

            bigKiwi.Rect        = new Rect(75, 75, 100, 100);
            bigKiwi.ImageSource = new BitmapImage(
                new Uri(@"sampleImages\kiwi.png", UriKind.Relative));

            imageDrawings.Children.Add(bigKiwi);

            // Create a 25 by 25 image with an upper-left point of (0,150).
            ImageDrawing smallKiwi1 = new ImageDrawing();

            smallKiwi1.Rect        = new Rect(0, 150, 25, 25);
            smallKiwi1.ImageSource = new BitmapImage(new Uri(@"sampleImages\kiwi.png", UriKind.Relative));
            imageDrawings.Children.Add(smallKiwi1);

            // Create a 25 by 25 image with an upper-left point of (150,0).
            ImageDrawing smallKiwi2 = new ImageDrawing();

            smallKiwi2.Rect        = new Rect(150, 0, 25, 25);
            smallKiwi2.ImageSource = new BitmapImage(new Uri(@"sampleImages\kiwi.png", UriKind.Relative));
            imageDrawings.Children.Add(smallKiwi2);

            // Create a 75 by 75 image with an upper-left point of (0,0).
            ImageDrawing wholeKiwi = new ImageDrawing();

            wholeKiwi.Rect        = new Rect(0, 0, 75, 75);
            wholeKiwi.ImageSource = new BitmapImage(new Uri(@"sampleImages\wholekiwi.png", UriKind.Relative));
            imageDrawings.Children.Add(wholeKiwi);

            //
            // Use a DrawingBrush to paint a rectangle with
            // the drawings.
            //
            DrawingBrush dBrush = new DrawingBrush(imageDrawings);

            dBrush.Viewport = new Rect(0, 0, 0.5, 0.5);
            dBrush.TileMode = TileMode.Tile;
            dBrush.Freeze();

            Rectangle exampleRectangle = new Rectangle();

            exampleRectangle.Width  = 175;
            exampleRectangle.Height = 175;
            exampleRectangle.Fill   = dBrush;

            // Create a border to contain the rectangle.
            Border exampleBorder = new Border();

            exampleBorder.BorderBrush         = Brushes.Gray;
            exampleBorder.BorderThickness     = new Thickness(1);
            exampleBorder.HorizontalAlignment = HorizontalAlignment.Left;
            exampleBorder.VerticalAlignment   = VerticalAlignment.Top;
            exampleBorder.Margin = new Thickness(20);
            exampleBorder.Child  = exampleRectangle;

            this.Background = Brushes.White;
            this.Margin     = new Thickness(20);
            this.Content    = exampleBorder;
        }