Painter.xaml:
<Window x:Class="WPFapp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Painter" Height="340" Width="350" Background="Beige">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Canvas Grid.Column="1" Margin="0" Name="paintCanvas"
Background="White" MouseMove="paintCanvas_MouseMove"
MouseLeftButtonDown="paintCanvas_MouseLeftButtonDown"
MouseLeftButtonUp="paintCanvas_MouseLeftButtonUp"
MouseRightButtonDown="paintCanvas_MouseRightButtonDown"
MouseRightButtonUp="paintCanvas_MouseRightButtonUp"/>
<StackPanel Margin="3">
<GroupBox Grid.ColumnSpan="1" Header="Color" Margin="3"
HorizontalAlignment="Stretch" VerticalAlignment="Top">
<StackPanel Margin="3" HorizontalAlignment="Left"
VerticalAlignment="Top">
<RadioButton Name="redRadioButton" Margin="3"
Checked="redRadioButton_Checked">red</RadioButton>
<RadioButton Name="blueRadioButton" Margin="3"
Checked="blueRadioButton_Checked">blue</RadioButton>
<RadioButton Name="greenRadioButton" Margin="3"
Checked="greenRadioButton_Checked">green</RadioButton>
<RadioButton Name="blackRadioButton" Margin="3" IsChecked="True"
Checked="blackRadioButton_Checked">black</RadioButton>
</StackPanel>
</GroupBox>
<GroupBox Header="Size" Margin="3">
<StackPanel Margin="3">
<RadioButton Name="smallRadioButton" Margin="3"
Checked="smallRadioButton_Checked">Small</RadioButton>
<RadioButton Name="mediumRadioButton" Margin="3" IsChecked="True"
Checked="mediumRadioButton_Checked">Medium</RadioButton>
<RadioButton Name="largeRadioButton" Margin="3"
Checked="largeRadioButton_Checked">Large</RadioButton>
</StackPanel>
</GroupBox>
<Button Height="23" Width="75" Name="undoButton" Margin="3,10,3,3"
Click="undoButton_Click">Undo</Button>
<Button Height="23" Width="75" Name="clearButton" Margin="3"
Click="clearButton_Click">Clear</Button>
</StackPanel>
</Grid>
</Window>
Painter.xaml.cs:
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.Navigation;
using System.Windows.Shapes;
namespace WPFapp
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private int diameter = 8;
private Brush brushColor = Brushes.Black;
private bool shouldErase = false;
private bool shouldPaint = false;
private enum Sizes
{
SMALL=4,
MEDIUM=8,
LARGE=10
}
public MainWindow()
{
InitializeComponent();
}
private void PaintCircle(Brush circleColor, Point position)
{
Ellipse newEllipse = new Ellipse();
newEllipse.Fill = circleColor;
newEllipse.Width = diameter;
newEllipse.Height = diameter;
Canvas.SetTop(newEllipse, position.Y);
Canvas.SetLeft(newEllipse, position.X);
paintCanvas.Children.Add(newEllipse);
}
private void paintCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
shouldPaint = true;
}
private void paintCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
shouldPaint = false;
}
private void paintCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
shouldErase = true;
}
private void paintCanvas_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
shouldErase = false;
}
private void paintCanvas_MouseMove(object sender, MouseEventArgs e)
{
if (shouldPaint)
{
Point mousePosition = e.GetPosition(paintCanvas);
PaintCircle(brushColor,mousePosition);
}
else if (shouldErase)
{
Point mousePosition = e.GetPosition(paintCanvas);
PaintCircle(paintCanvas.Background, mousePosition);
}
}
private void redRadioButton_Checked(object sender, RoutedEventArgs e)
{
brushColor = Brushes.Red;
}
private void blueRadioButton_Checked(object sender, RoutedEventArgs e)
{
brushColor = Brushes.Blue;
}
private void greenRadioButton_Checked(object sender, RoutedEventArgs e)
{
brushColor = Brushes.Green;
}
private void blackRadioButton_Checked(object sender, RoutedEventArgs e)
{
brushColor = Brushes.Black;
}
private void smallRadioButton_Checked(object sender, RoutedEventArgs e)
{
diameter = (int)Sizes.SMALL;
}
private void mediumRadioButton_Checked(object sender, RoutedEventArgs e)
{
diameter = (int)Sizes.MEDIUM;
}
private void largeRadioButton_Checked(object sender, RoutedEventArgs e)
{
diameter = (int)Sizes.LARGE;
}
private void undoButton_Click(object sender, RoutedEventArgs e)
{
int count = paintCanvas.Children.Count;
if (count > 0)
paintCanvas.Children.RemoveAt(count-1);
}
private void clearButton_Click(object sender, RoutedEventArgs e)
{
paintCanvas.Children.Clear();
}
}
}