wpf放大镜

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace byWpfTest
{
    /// <summary>
    /// Window6.xaml 的交互逻辑
    /// </summary>
    public partial class Window6 : Window
    {
        Grid myViewGrid = new Grid();

        //放大镜区域
        Grid magnifierGrid = new Grid();
        //创建承载放大镜的容器
        Canvas myCanvas = new Canvas();
        Path myPath = new Path();
        public Window6()
        {
            InitializeComponent();

       
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            //创建一个显示区域
            MyGrid.PreviewMouseMove += new MouseEventHandler(myViewGrid_PreviewMouseMove);
            //放大镜区域
 
            //创建承载放大镜的容器
     
           //容器内容居上居左对齐
            myCanvas.VerticalAlignment =VerticalAlignment.Top;
            myCanvas.HorizontalAlignment = HorizontalAlignment.Left;

            //放大镜的镜饼
            Line magnifierLine = new Line();
            //放大镜的镜柄的位置
            magnifierLine.X1=140;
            magnifierLine.X2=270;
            magnifierLine.Y1=135;
            magnifierLine.Y2=260;
            //放大镜的镜饼是30像素
            magnifierLine.StrokeThickness = 30;
            //创建渐变色的笔刷
            LinearGradientBrush linerBrush = new LinearGradientBrush();
            //创建开始结束的点
            Point startPoint = new Point(0, 0);
            Point endPoint = new Point(1, 0);
            linerBrush.StartPoint = startPoint;
            linerBrush.EndPoint = endPoint;
            //gradientStopcollection的集合
            GradientStopCollection gradientStiopCollection = new GradientStopCollection();
            GradientStop starColor = new GradientStop();
            starColor.Offset = 0;
            starColor.Color = Colors.Black;
            GradientStop endColor = new GradientStop();
            endColor.Offset = 1;
            endColor.Color = Colors.White;
            gradientStiopCollection.Add(starColor);
            gradientStiopCollection.Add(endColor);
            linerBrush.GradientStops = gradientStiopCollection;
            magnifierLine.Stroke=linerBrush;
            myCanvas.Children.Add(magnifierLine);


            /*
             * 创建扩大镜的镜面
             */
            Path elliposePath = new Path();
            elliposePath.Width = 160;
            elliposePath.Height = 160;
            elliposePath.Fill = new SolidColorBrush(Colors.White);
            GeometryGroup geometryGroup = new GeometryGroup();
            EllipseGeometry geometry1 = new EllipseGeometry();
            geometry1.RadiusX = 80;
            geometry1.RadiusY = 80;
            Point centerPoint1= new Point(80,80);
            geometry1.Center = centerPoint1;
            EllipseGeometry geometry2 = new EllipseGeometry();
            geometry2.RadiusX = 1;
            geometry2.RadiusY = 1;
            Point centerPoint2 = new Point(80, 80);
            geometry2.Center = centerPoint2;
            geometryGroup.Children.Add(geometry1);
            geometryGroup.Children.Add(geometry2);
            elliposePath.Data = geometryGroup;
            myCanvas.Children.Add(elliposePath);
            /**
             *创建扩大镜的影响面
             *
             */
            myPath = new Path();
            myPath.Width = 160;
            myPath.Height = 160;
            VisualBrush vb = new VisualBrush();
            Rect rc = new Rect(0,0,30,30);
            Rect rc1 = new Rect(0,0,1,1);
            vb.Viewbox = rc;
            vb.ViewboxUnits = BrushMappingMode.Absolute;
            vb.ViewportUnits = BrushMappingMode.RelativeToBoundingBox;
            vb.Viewport=rc1;
            myPath.Fill = vb;
            myPath.Data = geometryGroup;
            myCanvas.Children.Add(myPath);
          
           
            /*
             *扩大镜的外圈
             *
             */
            Ellipse outEllipse = new Ellipse();
            outEllipse.Width = 160;
            outEllipse.Height = 160;
            outEllipse.StrokeThickness = 5;
            //创建圆的渐变笔刷
            LinearGradientBrush outEllipseLinerBrush = new LinearGradientBrush();
            Point strOutEliposePoint = new Point(1,1);
            Point endOutEliposePoint = new Point(0,0);
            outEllipseLinerBrush.StartPoint=strOutEliposePoint;
            outEllipseLinerBrush.EndPoint=endOutEliposePoint;
            GradientStopCollection eliposeBrushCollenction = new GradientStopCollection();
            GradientStop stroutEliposeColor = new GradientStop();
            stroutEliposeColor.Offset=0;
            stroutEliposeColor.Color=Colors.Black;
            GradientStop endOutEliposeColor = new GradientStop ();
            endOutEliposeColor.Offset=1;
            endOutEliposeColor.Color=Colors.White;
            eliposeBrushCollenction.Add(stroutEliposeColor);
            eliposeBrushCollenction.Add(endOutEliposeColor);
            outEllipseLinerBrush.GradientStops = eliposeBrushCollenction;
            outEllipse.Stroke = outEllipseLinerBrush;
            myCanvas.Children.Add(outEllipse);

            /*
            *
            *扩大镜的里圈
            *
            */
 
            Ellipse inEllipse = new Ellipse();
            outEllipse.Width = 160;
            outEllipse.Height = 160;
            outEllipse.StrokeThickness = 5;
            //创建圆的渐变笔刷
            LinearGradientBrush inEllipseLinerBrush = new LinearGradientBrush();
            Point strInEliposePoint = new Point(1, 1);
            Point endInEliposePoint = new Point(0, 0);
            inEllipseLinerBrush.StartPoint = strInEliposePoint;
            inEllipseLinerBrush.EndPoint = endInEliposePoint;
            GradientStopCollection eliposeBrushCollenction1 = new GradientStopCollection();
            GradientStop strInEliposeColor = new GradientStop();
            strInEliposeColor.Offset =0;
            stroutEliposeColor.Color = Colors.White;
            GradientStop endInEliposeColor = new GradientStop();
            endOutEliposeColor.Offset = 1;
            endOutEliposeColor.Color = Colors.Black;
            eliposeBrushCollenction1.Add(stroutEliposeColor);
            eliposeBrushCollenction1.Add(endOutEliposeColor);
            inEllipseLinerBrush.GradientStops = eliposeBrushCollenction;
            inEllipse.Stroke = inEllipseLinerBrush;
            myCanvas.Children.Add(inEllipse);
            Thickness tn = new Thickness(0,0,0,0);
            Button btn = new Button() {
                Width = 200,
                Height = 50,
                Margin = tn,
                Content="点点看看是啥效果吼吼"
            };
           
            magnifierGrid.Children.Add(myCanvas);
            myViewGrid.Children.Add(btn);
         
            this.MyGrid.Children.Add(myViewGrid);
            this.MyGrid.Children.Add(magnifierGrid);
           

           VisualBrush vb1 = (VisualBrush)myPath.Fill;
           vb.Visual = myViewGrid;
           

        }

        void myViewGrid_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            VisualBrush vb = (VisualBrush)myPath.Fill;
            Point pimy = e.MouseDevice.GetPosition(myViewGrid);
            Rect rc = vb.Viewbox;
            rc.X = pimy.X - rc.Width / 2;
            rc.Y = pimy.Y - rc.Height / 2;
            vb.Viewbox = rc;
            Thickness tc = new Thickness(pimy.X - myPath.Width / 2, pimy.Y - myPath.Height / 2, pimy.X + myPath.Width / 2, pimy.Y + myPath.Height / 2);

            myCanvas.Margin = tc;
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值