none
Silverlight XAML Variable RRS feed

  • Frage

  • Hallo

    ich habe eine Uhr mit Zeigern in einer Usercontrol klasse erstellt und diese Zeiger mit einem Storyboard animiert:

    <DoubleAnimation Duration="0:0:0.5" From="180" To="540" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="Seconds" RepeatBehavior="Forever" />

    das ist jetzt zB. der Sekundenzeiger.

    nun möchte ich aber vom Code Behind aus in der XAML die Winkel "From" und "To" aus setzten, damit die Uhr "richtig gestellt" und schicker animiert wird.

    Wie kann ich diese Werte dahinter zu Variablen machen, sodass ich in der .cs einfach einen wert reichschreiben kann?

    Danke für jede Hilfe :) 

    Mittwoch, 8. Februar 2012 10:37

Antworten

  • Hi,

    du kannst es einfach über Bindings lösen. Im Code-behind erstellt du eine From- und eine To-Property auf die sich die Bindings beziehen.


    Best Regards. Please Mark Answered, If my solution solves your problem.

    Mittwoch, 8. Februar 2012 12:17
  • Du solltest Two-Way-Binding im XAML nutzen. Im Code-Behind solltest du das INotifyPropertyChanged Interface implementieren.

    Best Regards. Please Mark Answered, If my solution solves your problem.

    Mittwoch, 8. Februar 2012 13:36
  • Hallo Droggel,

    du solltest dich einwenig mit dem Prinzip der Vererbung in .NET/C# auseinander setzen um die Bedeutung und die Möglichkeiten in den Zeilen zu verstehen.

    Jetzt zu deiner Frage: In C# kann man immer nur von einer Klasse aber von beliebig vielen Interfaces ableiten d. h. dass du in diesem Fall folgendes Schreiben kannst:

    public partial class Clock: UserControl, INotifyPropertyChanged



    Gruß
    Rudolf

    "Der Nachteil der Intelligenz besteht darin, dass man ununterbrochen gezwungen ist, dazuzulernen." Georg Bernhard Shaw

    Mittwoch, 8. Februar 2012 16:23

Alle Antworten

  • Hi,

    du kannst es einfach über Bindings lösen. Im Code-behind erstellt du eine From- und eine To-Property auf die sich die Bindings beziehen.


    Best Regards. Please Mark Answered, If my solution solves your problem.

    Mittwoch, 8. Februar 2012 12:17
  • ganu das hab ich versucht aber dabei muss ich irgentetwas falsch machen :(

    <DoubleAnimation Duration="0:0:0.5" From="{Binding FromAngle1}" To="{Binding ToAngle1}" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="Seconds" RepeatBehavior="Forever" />
    			

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    
    namespace PhoneApp23
    {
        public partial class Clock : UserControl
        {
    
    
            public Clock()
            {
                InitializeComponent();
                Running.Begin();
    
                fromAngle1 = 200;
                toAngle1 = 230;
    
            }
    
            private int fromAngle1;
            public int FromAngle1
            {
                get { return fromAngle1; }
                set
                {
                    fromAngle1 = value;
                }
            }
    
            private int toAngle1;
            public int ToAngle1
            {
                get { return toAngle1; }
                set
                {
                    toAngle1 = value;
                }
            }
        }
    }
    

    er springt nie in die "set" methode :S

    Mittwoch, 8. Februar 2012 12:24
  • Du solltest Two-Way-Binding im XAML nutzen. Im Code-Behind solltest du das INotifyPropertyChanged Interface implementieren.

    Best Regards. Please Mark Answered, If my solution solves your problem.

    Mittwoch, 8. Februar 2012 13:36
  • Kannst du mir das an einem Beispiel zeigen?

    ich hab das Problem das ich von Silverlight allgemein wenig ahnung hab :S

    wie bringe ich da jetzt eine 2 wege Bindung rein und dieses INotifyPropertyChanged Interface kann ich doch gar nciht verwenden da dort doch in der Klassen deklaration

    public class Beispiel : INotifyPropertyChanged 

    stehen muss und bei mir bei einer USer Control bereits 

    public partial class Clock : UserControl

    steht :S

    Mittwoch, 8. Februar 2012 14:24
  • Hallo Droggel,

    du solltest dich einwenig mit dem Prinzip der Vererbung in .NET/C# auseinander setzen um die Bedeutung und die Möglichkeiten in den Zeilen zu verstehen.

    Jetzt zu deiner Frage: In C# kann man immer nur von einer Klasse aber von beliebig vielen Interfaces ableiten d. h. dass du in diesem Fall folgendes Schreiben kannst:

    public partial class Clock: UserControl, INotifyPropertyChanged



    Gruß
    Rudolf

    "Der Nachteil der Intelligenz besteht darin, dass man ununterbrochen gezwungen ist, dazuzulernen." Georg Bernhard Shaw

    Mittwoch, 8. Februar 2012 16:23
  • Sieh dir einfach den Link von mir weiter oben einfach genauer an. Da steht wie man das Interface implementiert. Dieses sollte implementiert werden damit das UI auch merkt, dass sich im Code-Behind was geändert hat (und damit Two-Way-Binding funktionsfähig macht).

    Ansonsten kann ich dem Rat von Rudolf nur zustimmen. Sein Post sollte dir einen Einstieg geben.


    Best Regards. Please Mark Answered, If my solution solves your problem.

    Mittwoch, 8. Februar 2012 17:25
  • Hi,

    ist deine Frage beantwortet? Falls ja, markiere bitte den entsprechenden Post als Antwort damit andere Nutzer mit einer ähnlichen Frage relevante Informationen schneller finden können.


    Best Regards. When you see answers and helpful posts, please click Vote As Helpful, Propose As Answer, and/or Mark As Answer. This helps us build a healthy and positive community.

    Mittwoch, 22. Februar 2012 10:19
  • Hallo Droggel,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 27. Februar 2012 15:21