【问题标题】:Object not shown on Canvas (WPF Application)对象未显示在画布上(WPF 应用程序)
【发布时间】:2022-01-06 13:26:49
【问题描述】:

在这个应用程序中,我有一个带有名为 Spawn 的方法的汽车类(它应该在我在 XAML 文件中定义的 Canvas 上绘制对象)。我在 MainWindow 中调用方法,但是当我运行我的程序时,没有汽车被绘制到画布上。

这里是 Spawn 方法:

        public void Spawn(Canvas cvs)
        {
            cvs = new Canvas();
            cvs.Children.Clear();

            carBody.Width = 70;
            carBody.Height = 120;
            carBody.Background = new SolidColorBrush(Color);

            Canvas.SetLeft(carBody, SpawnLocation.X);
            Canvas.SetTop(carBody, SpawnLocation.Y);

            Rectangle[] tires = new Rectangle[4];
            Rectangle[] windows = new Rectangle[2];
            Label lblBrand = new Label();

            RotateTransform rotation = new RotateTransform();

            // Reifen
            tires[0] = new Rectangle()
            {
                Fill = Brushes.Black,
                Width = 20,
                Height = 30
            };

            Canvas.SetLeft(tires[0], -9);
            Canvas.SetTop(tires[0], 18);

            tires[1] = new Rectangle()
            {
                Fill = Brushes.Black,
                Width = 20,
                Height = 30
            };

            Canvas.SetLeft(tires[1], 61);
            Canvas.SetTop(tires[1], 18);

            tires[2] = new Rectangle()
            {
                Fill = Brushes.Black,
                Width = 20,
                Height = 30
            };

            Canvas.SetLeft(tires[2], -9);
            Canvas.SetTop(tires[2], 80);

            tires[3] = new Rectangle()
            {
                Fill = Brushes.Black,
                Width = 20,
                Height = 30
            };

            Canvas.SetLeft(tires[3], 61);
            Canvas.SetTop(tires[3], 80);

            // Fenster
            windows[0] = new Rectangle() // Front
            {
                Fill = Brushes.White,
                Width = 50,
                Height = 40
            };

            Canvas.SetLeft(windows[0], 0);
            Canvas.SetTop(windows[0], 0);

            windows[1] = new Rectangle() // rear
            {
                Fill = Brushes.White,
                Width = 50,
                Height = 50
            };

            Canvas.SetLeft(windows[1], 0);
            Canvas.SetTop(windows[1], 0);

            // Label Automarke
            lblBrand.Width = 40;
            lblBrand.Height = 23;
            lblBrand.Content = Brand;

            // Add2Canvas
            for (int i = 0; i < tires.Length; i++)
                carBody.Children.Add(tires[i]);
            for (int i = 0; i < windows.Length; i++)
                carBody.Children.Add(windows[i]);
            carBody.Children.Add(lblBrand);

            if (Direction == "nord")
            {
                rotation.Angle = 0;
                rotation.CenterX = SpawnLocation.X;
                rotation.CenterY = SpawnLocation.Y;

                carBody.RenderTransform = rotation;
            }
            else if (Direction == "süd")
            {
                rotation.Angle = 180;
                rotation.CenterX = SpawnLocation.X;
                rotation.CenterY = SpawnLocation.Y;

                carBody.RenderTransform = rotation;
            }
            else if (Direction == "west")
            {
                rotation.Angle = 90;
                rotation.CenterX = SpawnLocation.X;
                rotation.CenterY = SpawnLocation.Y;

                carBody.RenderTransform = rotation;
            }
            else if (Direction == "ost")
            {
                rotation.Angle = 270;
                rotation.CenterX = SpawnLocation.X;
                rotation.CenterY = SpawnLocation.Y;

                carBody.RenderTransform = rotation;
            }

            cvs.Children.Add(carBody);
        }

调用方法MainWindow:

        Car car1;
        public MainWindow()
        {
            InitializeComponent();
            car1 = new Car("Audi", Colors.Red);
            car1.Direction = "west";
            car1.SpawnLocation = new Point(550, 340);
            car1.Spawn(gameScreen);
        }

提前致谢!

【问题讨论】:

    标签: c# wpf oop canvas 2d


    【解决方案1】:

    修好了!我初始化了 Spawn 方法的参数,在我删除它后它现在可以工作了。

    我的方法首先看起来像这样:

            public void Spawn(Canvas cvs)
            {
                cvs = new Canvas();
                cvs.Children.Clear();
    
                carBody.Width = 70;
         
    
    

    我初始化了 Argument,但由于我不想创建新的 Canvas,因此我删除了方法的前两行。

            public void Spawn(Canvas cvs)
            {
    
                carBody.Width = 70;
                carBody.Height = 120;
                carBody.Background = new SolidColorBrush(Color);
    

    现在它工作正常。

    【讨论】:

    • 回答你自己的问题很好,但我建议更具体地说明你是如何解决它的。考虑到其他人可能会发现您的问题很有用,因此想知道如何修复他们的代码。
    猜你喜欢
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2015-05-21
    • 2016-01-21
    • 2015-01-22
    相关资源
    最近更新 更多