图上显示跟随鼠标的十字交叉线
我们在PageLight页面上实现该功能
第一步,PageLight.xaml添加以下代码
<Page ...>
<Grid>
...
<Grid Name="workspace" Grid.Row="2" Grid.Column="1" Background="Black"
MouseLeftButtonDown="ImgMouseLeftButtonDown"
MouseLeftButtonUp="ImgMouseLeftButtonUp"
MouseMove="ImgMouseMove"
MouseWheel="ImgMouseWheel"
MouseLeave="ImgMouseLeave">
<Grid.Resources>
<TransformGroup x:Key="Imageview">
<ScaleTransform/>
<TranslateTransform/>
</TransformGroup>
</Grid.Resources>
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Disabled"
Cursor="Cross" Focusable="False" x:Name="BackFrame">
<ContentControl Name="imgcontrol">
<Image Name="image" Source="F:\chenggeng\source\Image\Desert.jpg"
Width="Auto" Height="Auto" RenderTransform="{StaticResource Imageview}"
Stretch="Uniform" RenderOptions.BitmapScalingMode="NearestNeighbor"/>
</ContentControl>
</ScrollViewer>
<Path Fill="Yellow" Stroke="Blue" Name="crossline"></Path>
</Grid>
</Grid>
</Page>
工作布局Grid中有两个控件,一个是可变换的图像,一个是承载十字交叉线的Path
第二步,PageLight.xaml.cs中添加以下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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.Navigation;
using System.Windows.Shapes;
namespace wpfbase
{
public partial class PageLight : Page
{
// 定义十字交叉线
private LineGeometry lineX, lineY;
private GeometryGroup linegroup;
public PageLight()
{
InitializeComponent();
// 初始化十字交叉线
lineX = new LineGeometry();
lineY = new LineGeometry();
linegroup = new GeometryGroup();
crossline.Data = linegroup;
linegroup.Children.Add(lineX);
linegroup.Children.Add(lineY);
this.SizeChanged += new System.Windows.SizeChangedEventHandler(PageLightResized);
// 工作区添加滚轮事件冒泡
workspace.PreviewMouseWheel += (sender, e) => {
var eventArg = new MouseWheelEventArgs(e.MouseDev