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

C# 绘制一个椭圆,然后将其移动到另一个位置,c#,wpf,ellipse,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

我用一个定义椭圆的高度、宽度和颜色的
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);
}
Random rand=new Random();
Int32 randomNumber=rand.Next(0310);
Int32 randomNumber2=rand.Next(0500);
对于(int j=0;j<60;j++)
{
椭圆点[j]=新椭圆(){Width=20,Height=20,Fill=brusks.Red};
canvas1.Children.Add(省略号[j]);
}
对于(int i=0;i<60;i++)
{
SetLeft(ellipsePoints[i],randomNumber2);
Canvas.SetTop(省略号[i],随机数);
}

我该怎么做才能使椭圆在一段时间后消失,然后出现在另一个随机位置?

这个问题有两个重要方面

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

    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>

这个问题有两个重要方面

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

    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>

我试着用一个while循环,但它只是冻结了。这是我唯一尝试过的方法。在我看来,你有两个选择可以探索:
System.Timers.Timer
System.Threading.Thread
。计时器是一个非常简单的倒计时,它在事件完成后返回事件。线程是一个新的独立执行行。它可以在每次迭代之间暂停循环。我不熟悉c#如何在c#中使用线程。@LightStriker:在WPF中,它优先使用System.Windows.Threading.Dispatchermer。我尝试使用while循环,但它只是冻结了。这是我唯一尝试过的方法。在我看来,你有两个选择可以探索:
System.Timers.Timer
System.Threading.Thread
。计时器是一个非常简单的倒计时,它在事件完成后返回事件。线程是一个新的独立执行行。它可以在每次迭代之间暂停循环。我不熟悉c#如何在c#中使用线程@LightStriker:在WPF中,它最好使用System.Windows.Threading.Dispatchermer。感谢你提供了文档化的代码这是我想要做的感谢你提供了文档化的代码这是我想要做的