2017-04-17 2 views
0

Ich erstelle derzeit ein css media/Android layout ähnliches Verhalten in WPF. Grundsätzlich habe ich Auflösungskategorien basierend auf drei Werten für die Bildschirmbreite: 800px, 1280px und 1920px.Automatische Größenanpassung von WPF-Fenstern mit fester Größe mit Konvertern während der Änderung der Auflösung

Es gibt drei entsprechende Ressourcenwörterbücher, die Int32 Werte mit Schlüsseln für die UI-Elemente enthalten. Ein Beispiel-Eintrag ist:

<sys:Int32 x:Key="initial_screen_width">1600</sys:Int32> 

Mein IConverter einfach überprüft die Bildschirmauflösung Ebene (der auf Bildschirmbreite basiert) und gibt den Schlüssel im Wörterbuch mit der entsprechenden Auflösung:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    int dimension = 0; 
    object value2 = value; 
    string resourceId = (string)parameter; 

    if(resourceId is string) 
    { 
     dimension = GetDimension(resourceId, GetResolutionLevel()); 
    } 

    return dimension; 
} 

Schließlich I einfach binden die UserControl Attribute, die mit dem Konverter:

<UserControl 
... 
Height="{Binding Converter={StaticResource LayoutDimensionConverter}, ConverterParameter=initial_screen_height}" 
... 
> 

Es perfekt funktionieren fine-- die entsprechenden Dimensionen zurückgeführt werden. Ich kann jedoch keine Möglichkeit finden, die Änderung der Auflösung zu verarbeiten (Aktualisieren der Benutzeroberfläche, um sie erneut anzupassen). Ich fand einige Links in Bezug auf die Verwendung von Update

so habe ich versucht, die Systemparameter als statische Variablen verwenden, aber die Auflösung Änderung nicht erkannt wird. Gibt es Möglichkeiten, dies zu tun?

Antwort

0

Dies wurde unter Verwendung SystemEvents.DisplaySettingsChanged getan.

 public SomeView() 
     { 
      SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged; 
     } 

     private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e) 
     { 
      // Refreshes UI 
      var dataContext = DataContext; 
      DataContext = null; 
      DataContext = dataContext; 
     } 

Jedes Mal, wenn die Bildschirmauflösung geändert wird, ist die DataContext zurückgesetzt und alle Wertwandler abgefeuert werden wieder.

Verwandte Themen