绘制一个椭圆,然后将其移动到另一个位置

时间:2013-04-20 15:00:27

标签: c# wpf ellipse

我使用EllipsePoints数组绘制了一个椭圆,该数组定义了椭圆的高度宽度和颜色。

然后使用for循环来获取椭圆的位置,使用椭圆点和随机数来设置其位置:

Random rand = new Random();     

Int32 randomNumber = rand.Next(0, 310);
Int32 randomNumber2 = rand.Next(0, 500);

for (int j = 0; j < 60; j++)
{
    ellipsePoints[j] = new Ellipse() { Width = 20, Height = 20, Fill = Brushes.Red };

    canvas1.Children.Add(ellipsePoints[j]);
}

for (int i = 0; i < 60; i++)
{
    Canvas.SetLeft(ellipsePoints[i], randomNumber2);
    Canvas.SetTop(ellipsePoints[i], randomNumber);
}

如果椭圆在一定时间后消失然后出现在另一个随机位置,我该怎么做?

1 个答案:

答案 0 :(得分:4)

这个问题有两个重要方面。

  • 计时器 - 在WPF中,我们使用 System.Windows.Threading.DispatcherTimer
  • 删除元素 - 一种方法是在将UI元素添加到Canvas之前维护该元素的副本。我已将其保存在类变量中,以便稍后可以使用以下方法将其从画布中删除

    PaintCanvas.Children.Remove(椭圆形);

创建WPF并添加一个名为PaintCanvas的画布

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="889" Width="1080">
    <Canvas Name="PaintCanvas">
        <Button Canvas.Left="46" Canvas.Top="274" Content="Button" Height="23" Name="button1" Width="75" Click="button1_Click" />
    </Canvas    >
</Window>

守则。我记录了它。

public partial class MainWindow : Window
{
    int loopCounter;
    private System.Windows.Threading.DispatcherTimer timer;
    Random rand = new Random();
    Ellipse ellipse = null;

    public MainWindow()
    {
        InitializeComponent();

        //Initialize the timer class
        timer = new System.Windows.Threading.DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(1); //Set the interval period here.
        timer.Tick += timer1_Tick;            
    }       

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        loopCounter = 10;
        timer.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        //Remove the previous ellipse from the paint canvas.
        PaintCanvas.Children.Remove(ellipse);

        if (--loopCounter == 0)
            timer.Stop();

        //Add the ellipse to the canvas
        ellipse=CreateAnEllipse(20,20 );
        PaintCanvas.Children.Add(ellipse);

        Canvas.SetLeft(ellipse, rand.Next(0, 310));
        Canvas.SetTop(ellipse, rand.Next(0, 500));
    }

    // Customize your ellipse in this method
    public Ellipse CreateAnEllipse(int height,int width)
    {
        SolidColorBrush fillBrush = new SolidColorBrush() { Color = Colors.Red };
        SolidColorBrush borderBrush = new SolidColorBrush() { Color = Colors.Black };

        return new Ellipse()
        {
            Height = height,
            Width = width,
            StrokeThickness = 1,
            Stroke = borderBrush,
            Fill = fillBrush
        };     
    }
}