I've created a WPF program which can draw lines and circles on a canvas. It works well, but I don't think it's the best solution. How can I make it work better? How would you create this program?
MainWindow
class:
public partial class MainWindow : Window { DrawCircle dc; DrawLine dl; public MainWindow() { InitializeComponent(); } private void cVas_MouseMove(object sender, MouseEventArgs e) { switch (rbLine.IsChecked) { case true: if (dl != null) dl.MouseMove(Mouse.GetPosition(cVas)); break; default: if (dc != null) dc.MouseMove(Mouse.GetPosition(cVas)); break; } } private void cVas_MouseDown(object sender, MouseButtonEventArgs e) { switch (rbLine.IsChecked) { case true: dl = new DrawLine(this); dl.MouseDown(Mouse.GetPosition(cVas)); break; default: dc = new DrawCircle(this); dc.MouseDown(Mouse.GetPosition(cVas)); break; } } private void cVas_MouseUp(object sender, MouseButtonEventArgs e) { dc = null; dl = null; } private void Window_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) cVas.Children.Clear(); } }
DrawLine
class (the DrawCircle
is similar to this):
class DrawLine { private Line myLine; MainWindow mw; public DrawLine(MainWindow mw) { this.mw = mw; } public void MouseDown(Point mousePoint) { myLine = new Line(); myLine.Stroke = Brushes.Black; myLine.StrokeThickness = 2; myLine.X1 = myLine.X2 = mousePoint.X; myLine.Y1 = myLine.Y2 = mousePoint.Y; mw.cVas.Children.Add(myLine); } public void MouseUp() { myLine = null; } public void MouseMove(Point mousePoint) { if (myLine != null) { (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).X2 = mousePoint.X; (mw.cVas.Children[mw.cVas.Children.IndexOf(myLine)] as Line).Y2 = mousePoint.Y; } } }
XAML:
<Window x:Class="WPFdraw.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" KeyDown="Window_KeyDown"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"></RowDefinition> <RowDefinition Height="20"></RowDefinition> </Grid.RowDefinitions> <Canvas Grid.Row="0" Background="Transparent" Name="cVas" Width="Auto" Height="Auto" MouseMove="cVas_MouseMove" MouseDown="cVas_MouseDown" MouseUp="cVas_MouseUp"></Canvas> <Grid Grid.Row="1"> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <RadioButton Grid.Column="0" GroupName="tool" IsChecked="True" Name="rbLine" VerticalAlignment="Center">Line</RadioButton> <RadioButton Grid.Column="1" GroupName="tool" Name="rbCircle" VerticalAlignment="Center">Circle</RadioButton> <Button Name="btn" Grid.Column="2" Content="klikk" ></Button> </Grid> </Grid> </Window>