.NET GUI

.NET Community rund um alle Graphical User Interface (GUI) Themen.
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

Transformationen werden immer wieder auf default?-werte zurückgesetzt...

Letzter Beitrag 10-27-2008 13:46 von jpkleinau. 4 Antworten.
Seite 1 von 1 (5 Treffer)
Beiträge sortieren: Zurück Weiter
  • 09-26-2008 1:32

    • Aliennr9
    • Top 100 Mitwirkender
    • Registriert am 09-25-2008
    • Beiträge 1
    • Punkte 50

    Transformationen werden immer wieder auf default?-werte zurückgesetzt...

    Hallo! Ich habe das Problem zwar schon bei MSDN beschrieben, allerdings hat dort niemand geantwortet. Dauraufhin hat mich jemand, netterweise, auf dieses Forum verwiesen. Also: Ich habe 2 methoden, die eine Transformgroup anlegen, wenn nicht vorhanden, oder ändern. Sie tuen dies auch, aber nur für die Animationsdauer. Nach der Animation sind die Werte der Skalierung und Rotation wieder auf 1. Wäre nett wenn jemand helfen könnte...

    Die beiden Methoden:

    public void Rotate(Point p, int angle)
    {

    UIElement r = (UIElement)maingrid.InputHitTest(p);

    if (r != null)
    {
    if ((r.RenderTransform as TransformGroup)==null)
    {
    TransformGroup group = new TransformGroup();
    RotateTransform rotate = new RotateTransform();
    ScaleTransform scale = new ScaleTransform();

    // add the transfrmations to the group

    group.Children.Add(scale);
    group.Children.Add(rotate);
    r.RenderTransform = group;
    }
    else
    {
    DoubleAnimation daRotate = new DoubleAnimation((double)r.RenderTransform.
    GetValue(RotateTransform.AngleProperty),(double)r.RenderTransform.GetValue(RotateTransform.AngleProperty) + (angle), new Duration(TimeSpan.FromMilliseconds(200)));
    RotateTransform rt = (r.RenderTransform as TransformGroup).Children[1] as RotateTransform;
    rt.BeginAnimation(RotateTransform.AngleProperty, daRotate);
    }
    }
    }
    public void Zoom(Point p, double amountX, double amountY)
    {

    UIElement r = (UIElement)maingrid.InputHitTest(p);

    if (r != null)
    {

    if ((r.RenderTransform as TransformGroup) == null)
    {
    TransformGroup group = new TransformGroup();
    RotateTransform rotate = new RotateTransform();
    ScaleTransform scale = new ScaleTransform();

    // add the transfrmations to the group

    group.Children.Add(scale);
    group.Children.Add(rotate);
    r.RenderTransform = group;
    }
    else
    {
    debugTextBox.Text = debugTextBox.Text + r.RenderTransform.GetHashCode() + Environment.NewLine;
    DoubleAnimation daScaleX = new DoubleAnimation((double)r.RenderTransform.GetValue(ScaleTransform.ScaleXProperty) + (amountX / 100), new
    Duration(TimeSpan.FromMilliseconds(2)));
    DoubleAnimation daScaleY = new DoubleAnimation((double)r.RenderTransform.GetValue(ScaleTransform.ScaleYProperty) + (amountY / 100), new
    Duration(TimeSpan.FromMilliseconds(2)));
    ScaleTransform sct = (r.RenderTransform as TransformGroup).Children[0] as ScaleTransform;
    sct.BeginAnimation(ScaleTransform.ScaleXProperty, daScaleX);
    sct.BeginAnimation(ScaleTransform.ScaleYProperty, daScaleX);

    }

    }

    }
    Abgelegt unter: ,
    • Beitragspunkte: 50
    • IP-Adresse ist Registriert
  • 09-26-2008 8:12 Antwort zu

    • FantaMango77
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 05-07-2008
    • Magdeburg, DE
    • Beiträge 82
    • Punkte 1.540
    • Moderator

    AW: Transformationen werden immer wieder auf default?-werte zurückgesetzt...


    Du solltest diese Zeile

    DoubleAnimation daScaleX = new DoubleAnimation(
        (double)r.RenderTransform.GetValue(ScaleTransform.ScaleXProperty) + (amountX / 100),
        new Duration(TimeSpan.FromMilliseconds(2)));
    
    durch diese ersetzen

    DoubleAnimation daScaleX = new DoubleAnimation(
        ((r.RenderTransform as TransformGroup).Children[0] as ScaleTransform).ScaleX + (amountX/100),
        new Duration(TimeSpan.FromMilliseconds(2)));
    

    Die anderen beiden Stellen dann natürlich analog anpassen.

    Der von dir gezeigte Quelltext ist aber sehr instabil. Zum Beispiel hängt die korrekte Arbeitsweise von der Reihenfolge ab, in der die Transformationen der Gruppe hinzugefügt werden. Sollte sich die Reihenfolge irgendwann ändern oder eine weitere Transformation der Gruppe hinzugefügt werden, wird dein Programm Scheppern.

    Ich habe das Gefühl, dass man das Ganze deutlich eleganter lösen könnte. Vielleicht beschreibst du genauer, was du vorhast.
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
  • 10-24-2008 3:50 Antwort zu

    AW: Transformationen werden immer wieder auf default?-werte zurückgesetzt...

    Hi,
    ich habe da einen alten Klassiker im Verdacht. DependencyProperties können wenn einmal animiert nicht so ohne weiteres verändert werden.
    Ich vermute, das die Animation hier immer noch die Finger im Spiel hat und die DP, anders als man das erwarten würde, diesen Wert nicht automatisch reflektiert.

    Versuch mal nach Beendigung, also im Completed Event, der jeweiligen Animation den Ziel-Wert quasi manuell in für deine zu animierende DP zu setzen.
    Darüberhinaus muss die Animation von der DP entfernt werden. (Geht zum Beispiel durch erneutes Aufrufen von BeginAnimation mit Null als Parameter)
    Das könnte dann etwa folgendermaßen aussehen:


    myAnimation.Completed+=delegate{

    myObject.myDependencyProperty=myTargetValue;

    myObject.BeginAnimation(myObject.myDependencyProperty,null);

    }



    Gruß
    Boris
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
  • 10-26-2008 15:58 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 450
    • Punkte 6.769
    • ForumsAdministrator

    AW: Transformationen werden immer wieder auf default?-werte zurückgesetzt...

    Hallo,

    vielen Dank für eure Beiträge. Dennoch möchte ich euch darauf hinweisen, dass sämtlicher zur Verfügung gestellter Sourcecode entsprechend gehighlightet werden sollte. Nähere Informationen wie dies funktioniert findet ihr im Beitrag: Wie poste ich Sourcecode richtig.

    Danke,

    Norbert

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 10-27-2008 13:46 Antwort zu

    • jpkleinau
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 05-07-2008
    • Frankfurt am Main
    • Beiträge 35
    • Punkte 505

    AW: Transformationen werden immer wieder auf default?-werte zurückgesetzt...

    Ich gebe Norbert und Jens absolut recht, das Ganze ist sauschwer zu lesen hier und dein Code scheint mir recht unelegant. Mir ist auch unklar, was du eigentlich damit erreichen willst.
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (5 Treffer)
Powered by Community Server (Commercial Edition)    Hosting powered by 69° media solutions