Hallo Community,
mein Code ist wie folgt:
1. Ich habe versucht den Code so zu gestalten, dass der User die Form auch frei entlang der oberen Bildschirmkante bewegen kann.
2. Der Code soll eine 130x15 Form oben an der Bildschirmkante anzeigen. Bei einem Button Click wird die Methode MaximizeWindow() aufgerufen. Diese soll das Fenster auf die Maße 250x250 vergrößern. Und zwar animiert, damit das ganze auch schön aussieht. Die Animation der Y Achse ist unnötig, ich weiß aber da ich später noch die anderen Bilschirmkanten implementieren will ist das durch aus sinnvoll (ist ja auch egal jetzt). Jedenfalls soll die Form sich "entfalten". Heißt: In gleicher Zeit nach rechts und links ausdehnen, sowie auch nach unten. Das passiert auch aber alles überhaupt nicht gleichzeitig und die alte Position geht hierbei fast immer verloren bzw. werden manche nicht verändert.
Jemand von euch ne Idee?
LG
Julian
EDIT: Also der Button zum umschalten befindet sich unten auf der Form. Sowohl in zusammengeklapptem und auseinandergeklapptem Zustand.
mein Code ist wie folgt:
C#-Quellcode
- public void MaximizeWindow()
- {
- Size targetSize = GetTargetSize(true);
- Point targetPosition = GetTargetPosition(true);
- //Animate window size
- DoubleAnimation animHeight = new DoubleAnimation(this.Height, targetSize.Height, new Duration(new TimeSpan(0, 0, 0, 0, 300)), FillBehavior.HoldEnd);
- DoubleAnimation animWidth = new DoubleAnimation(this.Width, targetSize.Width, new Duration(new TimeSpan(0, 0, 0, 0, 300)), FillBehavior.HoldEnd);
- //Animate window location
- DoubleAnimation animX = new DoubleAnimation(this.Left, targetPosition.X, new Duration(new TimeSpan(0, 0, 0, 0, 300)), FillBehavior.HoldEnd);
- DoubleAnimation animY = new DoubleAnimation(this.Top, targetPosition.Y, new Duration(new TimeSpan(0, 0, 0, 0, 300)), FillBehavior.HoldEnd);
- //Toggle arrow
- arrowButton.ArrowDirection = GetTargetArrowDirection(true);
- //Animate
- this.BeginAnimation(Window.LeftProperty, animX);
- this.BeginAnimation(Window.TopProperty, animY);
- this.BeginAnimation(Window.HeightProperty, animHeight);
- this.BeginAnimation(Window.WidthProperty, animWidth);
- //Status
- state = WindowState.Maximized;
- }
- public void MinimizeWindow()
- {
- Size targetSize = GetTargetSize(false);
- Point targetPosition = GetTargetPosition(false);
- //Animate window size
- DoubleAnimation animHeight = new DoubleAnimation(this.Height, targetSize.Height, new Duration(new TimeSpan(0, 0, 0, 0, 300)), FillBehavior.HoldEnd);
- DoubleAnimation animWidth = new DoubleAnimation(this.Width, targetSize.Width, new Duration(new TimeSpan(0, 0, 0, 0, 300)), FillBehavior.HoldEnd);
- //Animate window location
- DoubleAnimation animX = new DoubleAnimation(this.Left, targetPosition.X, new Duration(new TimeSpan(0, 0, 0, 0, 300)), FillBehavior.HoldEnd);
- DoubleAnimation animY = new DoubleAnimation(this.Top, targetPosition.Y, new Duration(new TimeSpan(0, 0, 0, 0, 300)), FillBehavior.HoldEnd);
- //Toggle arrow
- arrowButton.ArrowDirection = GetTargetArrowDirection(false);
- //Animate
- this.BeginAnimation(Window.LeftProperty, animX);
- this.BeginAnimation(Window.TopProperty, animY);
- this.BeginAnimation(Window.HeightProperty, animHeight);
- this.BeginAnimation(Window.WidthProperty, animWidth);
- //Status
- state = WindowState.Minimized;
- }
- public Point GetTargetPosition(bool maximized)
- {
- if (maximized)
- {
- double differenceWidth = GetTargetSize(true).Width - GetTargetSize(false).Width;
- return new Point(this.Left - differenceWidth, 0);
- }
- else
- {
- double differenceWidth = GetTargetSize(true).Width - GetTargetSize(false).Width;
- return new Point(this.Left + differenceWidth, 0);
- }
- }
- public Size GetTargetSize(bool maximized)
- {
- if (maximized)
- {
- //Later calculate with col/row
- return new Size(250, 250);
- }
- else
- {
- return new Size(130, 15);
- }
- }
1. Ich habe versucht den Code so zu gestalten, dass der User die Form auch frei entlang der oberen Bildschirmkante bewegen kann.
2. Der Code soll eine 130x15 Form oben an der Bildschirmkante anzeigen. Bei einem Button Click wird die Methode MaximizeWindow() aufgerufen. Diese soll das Fenster auf die Maße 250x250 vergrößern. Und zwar animiert, damit das ganze auch schön aussieht. Die Animation der Y Achse ist unnötig, ich weiß aber da ich später noch die anderen Bilschirmkanten implementieren will ist das durch aus sinnvoll (ist ja auch egal jetzt). Jedenfalls soll die Form sich "entfalten". Heißt: In gleicher Zeit nach rechts und links ausdehnen, sowie auch nach unten. Das passiert auch aber alles überhaupt nicht gleichzeitig und die alte Position geht hierbei fast immer verloren bzw. werden manche nicht verändert.
Jemand von euch ne Idee?
LG
Julian
EDIT: Also der Button zum umschalten befindet sich unten auf der Form. Sowohl in zusammengeklapptem und auseinandergeklapptem Zustand.
Hmkay.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jedijaeger“ ()