2017-06-29 5 views
0

Nehmen wir an, Sie haben WPF-Fenster mit einem Element, das seine Größe ändert, wenn das Fenster seine Größe ändert, sagen wir DockPanel mit zwei Elementen. Sie maximieren das Fenster, und das zweite Element wird ebenfalls maximiert. Also konnte ich seine Höhe/Breite nicht lesen und das wären Maximalwerte (das ist gut genug für meinen Zweck, also muss ich mir keine Sorgen machen, wenn die Taskleiste Platz braucht oder ähnliche Probleme).Wie berechnet man die maximale Breite/Höhe des Elements?

OK, aber lassen Sie uns zurück zum frisch gestarteten Fenster - ich würde gerne compute die maximale Breite/Höhe des gegebenen Elements ohne tatsächlich die Größe des Fensters ändern, nur reine Berechnung. Ist es machbar? Wie?

+0

Von welchem ​​Element möchten Sie die Breite und Höhe berechnen? Basierend auf welcher Information möchten Sie das berechnen? Können Sie nicht einfach auf Eigenschaften dieses Elements zugreifen und die Breite und Höhe erhalten? – pijemcolu

+0

@pijemcolu, von 'ListBox',' TextBox', beliebiges Element. "Höhe" gibt Ihnen die aktuelle Höhe, nicht das Maximum. – astrowalker

+0

Basierend auf was halten Sie einen Wert für die maximale Breite Höhe für ein Element? – pijemcolu

Antwort

1

Wenn ich Sie richtig verstehe, möchten Sie die maximale Größe wissen, die das Fenster sein könnte. Das wäre dann die Größe des Bildschirms. Bildschirmgröße ist ein verfügbarer Wert:

System.Windows.SystemParameters.PrimaryScreenWidth 
System.Windows.SystemParameters.PrimaryScreenHeight 

Vielleicht haben Sie so etwas tun könnte:

  • Get Größe Fenster
  • Get Größe des Elements
  • berechnen Offset (Window - Elementsize)
  • Get Bildschirmgröße
  • maximale Größe berechnen (screenSize - Offset)
+0

Vielen Dank, aber ich möchte maximale Breite/Höhe eines gegebenen Elements des Fensters erhalten, ohne das gesamte Fenster zu maximieren. Es könnte zum Beispiel 'ListBox' sein. – astrowalker

+0

Ich habe meine Antwort bearbeitet. Könnte vielleicht ein Hinweis in die richtige Richtung sein –

+0

Du bist großartig! "Natürlich" - wenn du die Antwort kennst :-) – astrowalker

1

Sie können ein Testfenster erstellen, das maximiert angezeigt wird, seine Breite und Höhe erhält und es dann schließt. Dies kann bei jeder Berechnung von Werten oder beim Start der Anwendung erfolgen, vorausgesetzt, Sie überprüfen, ob sich die Bildschirmauflösung nicht geändert hat.

private void GetMaximumWidthAndHeight(FrameworkElement element) 
{ 
    var testWindow = new Window(); 
    testWindow.Visibility = Visibility.Collapsed; 
    testWindow.ShowInTaskbar = false; 

    testWindow.WindowState = WindowState.Maximized; 
    testWindow.Show(); 

    var maximizedWindowHeight = testWindow.ActualHeight; 
    var maximizedWindowWidth = testWindow.ActualWidth; 

    testWindow.Close(); 

    var maxToCurrentHeightRatio = maximizedWindowHeight/this.ActualHeight; 
    var maxToCurrentWidthRatio = maximizedWindowWidth/this.ActualWidth; 

    var maximumElementHeight = element.ActualHeight * maxToCurrentHeightRatio; 
    var maximumElementWidth = element.ActualWidth * maxToCurrentWidthRatio; 

    // Do something with the values 
} 
+0

Danke, aber dann ist es in meinem Fall einfacher, Fenster am Start zu maximieren und dann normal zu gehen. Aber dann wäre es natürlich toll, die Größenänderung komplett zu entfernen. – astrowalker

Verwandte Themen