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