<Window x:Class="WpfApp133.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp133"
mc:Ignorable="d" WindowState="Maximized"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Canvas x:Name="cvs" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
MouseWheel="cvs_MouseWheel"
MouseDown="cvs_MouseDown"
MouseMove="cvs_MouseMove"
MouseUp="cvs_MouseUp">
<Viewbox>
<Image Source="\Images\cl1.jpg" Stretch="UniformToFill" />
</Viewbox>
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform x:Name="scaler"/>
<TranslateTransform x:Name="translater"/>
</TransformGroup>
</Canvas.RenderTransform>
</Canvas>
</Grid>
</Window>
//
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 WpfApp133
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
DrawEllipse();
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
int width = (int)this.ActualWidth;
int height = (int)this.ActualHeight;
for (int i = 0; i < width; i += 100)
{
for (int j = 0; j < height; j += 100)
{
Ellipse elp = new Ellipse();
elp.Width = 10;
elp.Height = 10;
elp.Fill = new SolidColorBrush(Colors.Red);
Canvas.SetLeft(elp, i);
Canvas.SetTop(elp, j);
cvs.Children.Add(elp);
}
}
}
private void DrawEllipse()
{
}
private void cvs_MouseWheel(object sender, MouseWheelEventArgs e)
{
Point pt = e.GetPosition(this);
if (e.Delta > 0)
{
scaler.ScaleX *= 1.2;
scaler.ScaleY *= 1.2;
}
else
{
scaler.ScaleX /= 1.2;
scaler.ScaleY /= 1.2;
}
scaler.CenterX = pt.X;
scaler.CenterY = pt.Y;
}
Point previousPt;
bool isMoving = false;
private void cvs_MouseDown(object sender, MouseButtonEventArgs e)
{
previousPt = e.GetPosition(this);
}
private void cvs_MouseMove(object sender, MouseEventArgs e)
{
isMoving= true;
}
private void cvs_MouseUp(object sender, MouseButtonEventArgs e)
{
if(isMoving && e.ChangedButton==MouseButton.Left && e.ButtonState==MouseButtonState.Released)
{
Point newPt=e.GetPosition(this);
double deltaX=newPt.X - previousPt.X;
double deltaY = newPt.Y - previousPt.Y;
translater.X += deltaX;
translater.Y += deltaY;
isMoving= false;
}
}
}
}