Announcement

Collapse
No announcement yet.

WPF Hilfe mit Rectangle und Maus

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • WPF Hilfe mit Rectangle und Maus

    Also hi an alle,

    ich habe folgendes Problem:

    Ich würde gerne ein Programm von mir, dass ich damals mit Windows Forms gemacht habe auf WPF umschreiben. Das Programm war sozusagen ein mini Moorhuhn. Es wurde Rectangle gezeichnet die ich auf dem Screen herumfuhren ließ und der User musste mit der Maus drauf Drücken.

    Dieses Programm versuche ich jetzt auch im WPF zu schreiben. Da stoße ich aber auf ein Problem auf Grund meiner Unwissenheit wegen WPF. Ich habe das Programm gezeichnet und in ein Canvas die Rechtecke hineingemacht.

    Nun kommen wir zu dem was für mich ganz neu war und zwar sind das die Animationen in WPF. Um ein Objekt zu bewegen, muss man eine Animation erstellen und das ganze sieht dann sehr nett aus.

    Mein Problem in diesem ist aber folgendes:

    Bei meinem Windows Forms Programm war das so, dass ich in einem Array die X&Y-Koordinaten des Rechteckes gespeichert hatte. Diese wurde ein wenig verändert und dann neu gezeichnet und dann über die Refresh Funktion neu gezeichnet. So konnte ich problemlos wenn man mit der Maus gedrückt hat überprüfen, ob der Mausklick über dem Objekt war oder nicht weil ich auf die Koordinaten des Objekts zugreifen konnte.

    Nun bin ich aber bei den Animationen -> Diese wird einfacha gestartet und läuft dann ab. Jedoch mein Problem ist wo steht jetzt wo sich das objekt jetzt gerade befindet????

    Ich wollte es auch einfacher versuchen und zwar wollte ich meine Rechtecke mit Hilfe von RenderTransform verschieben. Leider habe ich hierzu nur XAML Anleitungen gefunden und mit XAML will ich nichts zu tun haben. Außerdem wüsste ich nicht wie ich die Scene neu zeichnen lassen sollte und wo ich die Koordinaten dann abrufen sollte????

    Kann mir jemand von euch bitte helfen !!!!

    mfg Yosh

    PS: Hier ist der Codeausschnitt vom WPF was ich bis jetzt habe (die Double Animation ignorieren habe einfach nur mal angeschaut =))

    Code:
    using System.Windows;
    using System.Windows.Media;
    using System.Windows.Controls;
    using System.Windows.Input;
    using System.Windows.Shapes;
    using System.Windows.Media.Animation;
    using System;
    
    namespace WPFTest
    {
        class Fenster : Window
        {
            Canvas Monitor = new Canvas();
            Canvas Scene = new Canvas();
    
            public Fenster()
            {
                Title = "Schießbude C#/WPF";
                Width = 800;
                Height = 600;
                Background = Brushes.White;
                this.Content = Monitor;
    
                SettingApplication();
                DrawScene();
            }
    
            public void DrawScene()
            {
                Scene.Background = Brushes.Black;
                Scene.Height = 500;
                Scene.Width = 750;
                Scene.Cursor = Cursors.Cross;
    
                Rectangle Ziel1 = new Rectangle();
                Rectangle Ziel2 = new Rectangle();
                Ziel1.Fill = Brushes.GreenYellow;
                Ziel2.Fill = Brushes.GreenYellow;
                Ziel1.Height = 100;
                Ziel1.Width = 100;
                Ziel2.Height = 100;
                Ziel2.Width = 100;
    
                DoubleAnimation test = new DoubleAnimation(100.0, 300.0, new Duration(TimeSpan.FromSeconds(5)));
                test.AutoReverse = true;
                test.RepeatBehavior = RepeatBehavior.Forever;
    
                Canvas.SetLeft(Ziel1, 40);
                Canvas.SetTop(Ziel1, 40);
                Canvas.SetLeft(Ziel2, 40);
                Canvas.SetTop(Ziel2, 200);
    
                Scene.Children.Add(Ziel1);
                Scene.Children.Add(Ziel2);
    
                Ziel2.BeginAnimation(Rectangle.HeightProperty, test);            
            }
    
            public void SettingApplication()
            {
                Label Text1 = new Label();
                Label Text2 = new Label();
                Label Zeit = new Label();
                Label Punkte = new Label();
    
                Text1.Content = "Zeit";
                Text2.Content = "Punkte";
                Zeit.Content = "05:00";
                Punkte.Content = "000000000";
    
                Canvas.SetLeft(Scene, 18);
                Canvas.SetTop(Scene, 20);
                Canvas.SetLeft(Text1, 10);
                Canvas.SetBottom(Text1, 10);
                Canvas.SetLeft(Zeit, 60);
                Canvas.SetBottom(Zeit, 10);
                Canvas.SetRight(Punkte, 10);
                Canvas.SetBottom(Punkte, 10);
                Canvas.SetRight(Text2, 80);
                Canvas.SetBottom(Text2, 10);
    
                Monitor.Children.Add(Text1);
                Monitor.Children.Add(Text2);
                Monitor.Children.Add(Zeit);
                Monitor.Children.Add(Punkte);
                Monitor.Children.Add(Scene);
            }
    
            [System.STAThread()]
    
            public static void Main()
            {
                new Application().Run(new Fenster());
            }
        }
    
    }
    1
    Die Animationen sind der Wahnsinn!
    100,00%
    1
    Es sieht nett aus aber wozu???
    0,00%
    0
    Wer hat den Mist entwickelt???
    0,00%
    0
    Was zum Teufel ist das für ein Bullsh**!!!
    0,00%
    0
Working...
X