您的位置:首页 > 其它

wpf放大镜

2009-10-04 10:33 405 查看
<Window x:Class="byWpfTest.Window5"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window5" Height="757" Width="709" Loaded="Window_Loaded">
<!--最外区域快-->
<Grid PreviewMouseMove="Grid_PreviewMouseMove">

<!--显示区域-->

<Grid Name="showGrid">
<Grid.RowDefinitions>
<RowDefinition Height="100*" />
<RowDefinition Height="98*" />
<RowDefinition Height="521*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="56*" />
<ColumnDefinition Width="272*" />
<ColumnDefinition Width="228*" />
<ColumnDefinition Width="131*" />
</Grid.ColumnDefinitions>
<Button Height="23" Margin="14,0,3,4" Name="butto3" VerticalAlignment="Bottom" Grid.Column="1">Button</Button>
<Label Margin="14,39,88,33" Name="label1" Grid.Column="1">Label</Label>
<Label Margin="122,26,43,46" Name="lblText" Grid.Column="1">Labefdsfdsfsdfdsfdsfdsl</Label>
</Grid>
<!--放大镜-->
<Grid Name="myGrid" >

<Canvas Name="canvas" VerticalAlignment="Top" HorizontalAlignment="Left">

<Line StrokeThickness="30" X1="140" X2="270" Y1="135" Y2="260" >
<Line.Stroke>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Offset=" 0" Color="Black"></GradientStop>
<GradientStop Offset=" 1" Color="White"></GradientStop>
</LinearGradientBrush>
</Line.Stroke>

</Line>

<Path Width="160" Height="160" Fill="White" >
<Path.Data>
<GeometryGroup>
<EllipseGeometry RadiusX="80" RadiusY="80" Center="80,80" ></EllipseGeometry>
<EllipseGeometry RadiusX="1" RadiusY="1" Center="80,80" >
</EllipseGeometry>
</GeometryGroup>
</Path.Data>
</Path>
<Path Name="myPath" Width="160" Height="160">
<Path.Fill>
<VisualBrush Viewbox="0,0,30,30" ViewboxUnits="Absolute" ViewportUnits="RelativeToBoundingBox" Viewport="0,0,1,1"></VisualBrush>
</Path.Fill>
<Path.Data>
<GeometryGroup>
<EllipseGeometry RadiusX="80" RadiusY="80" Center="80,80" ></EllipseGeometry>
<EllipseGeometry RadiusX="1" RadiusY="1" Center="80,80" >
</EllipseGeometry>
</GeometryGroup>

</Path.Data>
</Path>

<Ellipse Width="160" Height="160" StrokeThickness="5">
<Ellipse.Stroke>
<LinearGradientBrush StartPoint="1,1" EndPoint="0,0">
<GradientStop Offset="0" Color="Black"></GradientStop>
<GradientStop Offset="1" Color="White"></GradientStop>
</LinearGradientBrush>
</Ellipse.Stroke>
</Ellipse>
<Ellipse Width="160" Height="160" StrokeThickness="5">
<Ellipse.Stroke>
<LinearGradientBrush StartPoint="1,1" EndPoint="0,0">
<GradientStop Offset="1" Color="Black"></GradientStop>
<GradientStop Offset="0" Color="White"></GradientStop>
</LinearGradientBrush>
</Ellipse.Stroke>
</Ellipse>
</Canvas>
<Button Canvas.Left="348" Canvas.Top="182" Height="23" Name="button1" Width="75">Button</Button>

</Grid>
</Grid>
</Window>

/

*

* 后台代码

*

*/

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>
/// Window5.xaml 的交互逻辑
/// </summary>
public partial class Window5 : Window
{
public Window5()
{
InitializeComponent();
VisualBrush vb = (VisualBrush)myPath.Fill;
vb.Visual = showGrid;
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{

}

private void Grid_PreviewMouseMove(object sender, MouseEventArgs e)
{
VisualBrush vb = (VisualBrush)myPath.Fill;
Point pimy = e.MouseDevice.GetPosition(showGrid);
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);

canvas.Margin = tc;
//Canvas.SetLeft(canvas, pimy.X - myPath.Width / 2);
//Canvas.SetTop(canvas, pimy.Y - myPath.Height / 2);

}
}
}

后台代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: