Ich habe in letzter Zeit die neuen APIs von Windows.UI.Composition ausprobiert, und bei der Verwendung der Farbbloom-Animation habe ich versucht, vier von ihnen gleichzeitig von jeder Seite des Bildschirms auszuführen. Ich habe in der Lage gewesen, alle vier von ihnen zu machen bei einem Klick auf eine Schaltfläche ausgeführt, aber den letzten Übergang ich angefangen habe, nehme immer über das Display am Ende zum Beispiel:Wie laufen mehrere Farbbloom-Animationen, die gleichzeitig laufen?
Dies ist, was passiert:
Aber was passieren sollte ist, dass alle Farben den Bildschirm gleichzeitig ausfüllen sollten. Wie könnte ich das tun?
Dies ist der Code, den ich verwenden, um die Animationen zu starten:
private void surroundBloomButton_Click(object sender, RoutedEventArgs e)
{
//all of these headers are actually textblocks I've placed on the sides of the grid.
var header = topFlower;
var headerPosition = topFlower.TransformToVisual(UICanvas).TransformPoint(new Windows.Foundation.Point(0d, 0d));
var header2 = rightFlower;
var header2Position = rightFlower.TransformToVisual(UICanvas).TransformPoint(new Windows.Foundation.Point(0d, 0d));
var header3 = bottomFlower;
var header3Position = bottomFlower.TransformToVisual(UICanvas).TransformPoint(new Windows.Foundation.Point(0d, 0d));
var header4 = leftFlower;
var header4Position = leftFlower.TransformToVisual(UICanvas).TransformPoint(new Windows.Foundation.Point(0d, 0d));
//Uses values of the textBlock size
var initialBounds = new Windows.Foundation.Rect()
{
Width = header.RenderSize.Width,
Height = header.RenderSize.Height,
X = headerPosition.X,
Y = headerPosition.Y
};
var finalBounds = Window.Current.Bounds; // maps to the bounds of the current window
//The code is super easy to understand if you set a break point here and
//check to see what happens step by step ;)
surroundButtonTransition.Start((Windows.UI.Color.FromArgb(255, 255, 0, 0)), // the color for the circlular bloom
initialBounds, // the initial size and position
finalBounds); // the area to fill over the animation duration
// Add item to queue of transitions
initialBounds = new Rect()
{
Width = header2.RenderSize.Width,
Height = header2.RenderSize.Height,
X = header2Position.X,
Y = header2Position.Y
};
surroundButtonTransition.Start((Windows.UI.Color.FromArgb(255, 255, 150, 0)), // the color for the circlular bloom
initialBounds, // the initial size and position
finalBounds); // the area to fill over the animation duration
initialBounds = new Rect()
{
Width = header3.RenderSize.Width,
Height = header3.RenderSize.Height,
X = header3Position.X,
Y = header3Position.Y
};
surroundButtonTransition.Start((Windows.UI.Color.FromArgb(255, 0, 255, 0)), // the color for the circlular bloom
initialBounds, // the initial size and position
finalBounds); // the area to fill over the animation duration
initialBounds = new Rect()
{
Width = header4.RenderSize.Width,
Height = header4.RenderSize.Height,
X = header4Position.X,
Y = header4Position.Y
};
surroundButtonTransition.Start((Windows.UI.Color.FromArgb(255, 0, 0, 255)), // the color for the circlular bloom
initialBounds, // the initial size and position
finalBounds); // the area to fill over the animation duration
}
private void SurroundButtonTransition_ColorBloomTransitionCompleted(object sender, EventArgs e)
{
//Changes colour of background to "White Smoke " when
//the animations have finished.
UICanvas.Background = new SolidColorBrush(Windows.UI.Colors.WhiteSmoke);
}