簡體   English   中英

C#WPF。 如何將Ellipces動態添加到畫布中?

[英]C# WPF. How to add Ellipces dynamically into canvas?

我正在嘗試在畫布中添加一些具有隨機位置的橢圓,但是我可以在畫布上看到它們。 Progmab正在編譯中。 碼:

for (int i = 0; i < FirefliesCount; ++i)
            {
                Firefly CurrentFirefly = new Firefly();
                CurrentFirefly.Speed = Randomer.Next(1, 3);
                CurrentFirefly.Body = new Ellipse();
                CurrentFirefly.Body.Margin = new Thickness(Randomer.Next(10, (int)MainCanvas.Width - 10),
                                                           Randomer.Next(10, (int)MainCanvas.Height - 10),
                                                           0, 0);
                CurrentFirefly.Body.Fill = Brushes.Black;
                CurrentFirefly.Body.Height = MainCanvas.Height / 4;
                CurrentFirefly.Body.Width = 1.5 * CurrentFirefly.Body.Height;
                MainCanvas.Children.Add(CurrentFirefly.Body);
            }

和Fireflie類:

class Firefly
{
    public Ellipse Body { get; set; }
    public int Speed { get; set; }
}

可能您沒有設置MainCanvasWidthHeight屬性; 那么它們的值為NaN ,因此您將看不到橢圓。 我的建議是改用ActualWidthActualHeight並延遲添加橢圓,直到加載畫布為止。 這是一個例子:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        MainCanvas.Loaded += MainCanvas_Loaded;
    }

    void MainCanvas_Loaded(object sender, RoutedEventArgs e)
    {
        Init();
    }

    private void Init()
    {
        const int FirefliesCount = 100;
        Random Randomer = new Random();

        for (int i = 0; i < FirefliesCount; ++i)
        {
            Firefly CurrentFirefly = new Firefly();
            CurrentFirefly.Speed = Randomer.Next(1, 3);
            CurrentFirefly.Body = new Ellipse();
            CurrentFirefly.Body.Margin = new Thickness(Randomer.Next(10, (int)MainCanvas.ActualWidth - 10),
                                                       Randomer.Next(10, (int)MainCanvas.ActualHeight - 10),
                                                       0, 0);
            CurrentFirefly.Body.Fill = Brushes.Black;
            CurrentFirefly.Body.Height = MainCanvas.ActualHeight / 4;
            CurrentFirefly.Body.Width = 1.5 * CurrentFirefly.Body.Height;
            MainCanvas.Children.Add(CurrentFirefly.Body);
        }
    }
}

相應的xaml文件如下所示:

<Window x:Class="WpfApplication7.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">
    <Canvas x:Name="MainCanvas"/>
</Window>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM