<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="Microsoft.Samples.Graphics.UsingVisualBrush.MagnifyingGlassExample" Background="White"> <Page.Resources> <Style TargetType="{x:Type Paragraph}"> <Setter Property="Margin" Value="10" /> </Style> <DrawingBrush x:Key="MyGridBackgroundBrushResource" Viewport="0,0,10,10" ViewportUnits="Absolute" TileMode="Tile"> <DrawingBrush.Drawing> <DrawingGroup> <DrawingGroup.Children> <GeometryDrawing Brush="White"> <GeometryDrawing.Geometry> <RectangleGeometry Rect="0,0,1,1" /> </GeometryDrawing.Geometry> </GeometryDrawing> <GeometryDrawing Brush="#E6E8F6" Geometry="M 0,0 L 0,1 0.1,1 0.1,0.1 1,0.1 1,0 Z" /> </DrawingGroup.Children> </DrawingGroup> </DrawingBrush.Drawing> </DrawingBrush> </Page.Resources> <Grid> <ScrollViewer> <StackPanel Name="magnifiedPanel" VerticalAlignment="Stretch" MouseMove="updateMagnifyingGlass" Background="{StaticResource MyGridBackgroundBrushResource}"> <FlowDocumentScrollViewer> <FlowDocument> <Paragraph><Button></Button></Paragraph> <Paragraph><Border BorderBrush="Black" BorderThickness="1"><Image Source="c:image.jpg" Stretch="None" /></Border></Paragraph> <Paragraph>this is a test</Paragraph> </FlowDocument> </FlowDocumentScrollViewer> </StackPanel> </ScrollViewer> <Canvas Name="magnifyingGlassCanvas"> <Ellipse Name="magnifyingGlassEllipse" Width="100" Height="100" Stroke="Black"> <Ellipse.Fill> <DrawingBrush> <DrawingBrush.Drawing> <DrawingGroup> <DrawingGroup.Children> <GeometryDrawing Brush="White"> <GeometryDrawing.Geometry> <RectangleGeometry Rect="0,0,1,1" /> </GeometryDrawing.Geometry> </GeometryDrawing> <GeometryDrawing> <GeometryDrawing.Brush> <VisualBrush x:Name="myVisualBrush" ViewboxUnits="Absolute" Visual="{Binding ElementName=magnifiedPanel}"/> </GeometryDrawing.Brush> <GeometryDrawing.Geometry> <RectangleGeometry Rect="0,0,1,1" /> </GeometryDrawing.Geometry> </GeometryDrawing> </DrawingGroup.Children> </DrawingGroup> </DrawingBrush.Drawing> </DrawingBrush> </Ellipse.Fill> </Ellipse> </Canvas> </Grid> </Page> //File:Window.xaml.cs using System; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Media; using System.Windows.Input; namespace Microsoft.Samples.Graphics.UsingVisualBrush { public partial class MagnifyingGlassExample : Page { private static readonly double distanceFromMouse = 5; public MagnifyingGlassExample() { } private void updateMagnifyingGlass(object sender, MouseEventArgs args) { Mouse.SetCursor(Cursors.Cross); Point currentMousePosition = args.GetPosition(this); if (this.ActualWidth - currentMousePosition.X > magnifyingGlassEllipse.Width + distanceFromMouse) { Canvas.SetLeft(magnifyingGlassEllipse, currentMousePosition.X + distanceFromMouse); } else { Canvas.SetLeft(magnifyingGlassEllipse, currentMousePosition.X - distanceFromMouse - magnifyingGlassEllipse.Width); } if (this.ActualHeight - currentMousePosition.Y > magnifyingGlassEllipse.Height + distanceFromMouse) { Canvas.SetTop(magnifyingGlassEllipse, currentMousePosition.Y + distanceFromMouse); } else { Canvas.SetTop(magnifyingGlassEllipse, currentMousePosition.Y - distanceFromMouse - magnifyingGlassEllipse.Height); } myVisualBrush.Viewbox = new Rect(currentMousePosition.X - 10, currentMousePosition.Y - 10, 20, 20); } } }