WPF图像上画线

图上显示跟随鼠标的十字交叉线

我们在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值