2016-04-08 19 views
3

In meiner aktuellen App habe ich eine Reihe von Schaltflächen, die ihr entsprechendes StackLayout verbergen oder anzeigen können. Zuerst habe ich versucht mit IsVisble-Eigenschaft, aber das verursacht einen Flash, jetzt im mit LayoutTo(), die auch blinkt?Xamarin Forms verblassen zu versteckt?

ist mein Code wie folgt:

async void btnStrike_Clicked(object sender, EventArgs args) 
     { 
      var layout = this.FindByName<StackLayout>("stkStrikeInfo"); 
      var rect = new Rectangle(layout.X, layout.Y, layout.Width, layout.Height - layout.Height); 
      await layout.LayoutTo(rect, 2500, Easing.Linear); 
     } 

Id die Höhe animieren mögen!

Edit:

fand ich das folgende Stück Code, der das Stacklayout von der Seite entfernt. Das Problem ist jetzt, dass die Ansicht nicht aktualisiert wird?

Antwort

6

Ich denke, Sie haben mehr Glück mit nur einer Standardanimation, die die Höhe des Layouts, das Sie ausblenden möchten, auf Null reduziert.

void btnStrike_Clicked(object sender, EventArgs args) 
{ 
    // get reference to the layout to animate 
    var layout = this.FindByName<StackLayout>("stkStrikeInfo"); 

    // setup information for animation 
    Action<double> callback = input => { layout.HeightRequest = input; }; // update the height of the layout with this callback 
    double startingHeight = layout.Height; // the layout's height when we begin animation 
    double endingHeight = 0; // final desired height of the layout 
    uint rate = 16; // pace at which aniation proceeds 
    uint length = 1000; // one second animation 
    Easing easing = Easing.CubicOut; // There are a couple easing types, just tried this one for effect 

    // now start animation with all the setup information 
    layout.Animate("invis", callback, startingHeight, endingHeight, rate, length, easing); 
} 

Wenn das Layout bereits versteckt und Sie wollen es zeigen, würden Sie

double startingHeight = layout.Height; 
double endingHeight = 0; 

mit

double startingHeight = 0; 
double endingHeight = 55; 

Die 55 ersetzen Sie einfach eine beliebige Höhe ist, wenn Sie es wollen Um zu der vorherigen Höhe zurückzukehren, speichern Sie die vorherige Höhe in einer Variablen, bevor Sie sie ausblenden und die gespeicherte Höhe anstelle von 55 verwenden.

+0

Hallo, Es gibt einen Fehler für den Rückruf, "Kann Lambda-Ausdruck nicht einer implizit typisierten Variablen zuweisen" –

+0

Feste Lambda-Zuordnung. Siehe aktualisierte Antwort. –

+0

Kann nicht von System.Action zu Xamarin.Forms.Animation –