2012-04-01 13 views
0

Ich versuche, System.Windows.SystemParameters.PrimaryScreenWidth an eine Width-Eigenschaft von ColumnDefinition (aus einem 'Grid') zu binden, und einen Konverter zu dem Konvertieren der 'PrimaryScreenWidth' in eine 'GridLength'. Aber es kommt nie in den 'convert' Code.WPF-Bindung von System.Windows.SystemParameters.PrimaryScreenWidth mit einem Konverter

Hier ist meine XAML:

<Window.Resources> 
    <local:ScreenWidthToLeftBarWidth x:Key="leftBarConverter" /> 
</Window.Resources> 
<ColumnDefinition Width="{Binding ElementName=System.Windows.SystemParameters, Path=PrimaryScreenWidth, Converter={StaticResource leftBarConverter}}"/> 

Hier ist mein Codebehind für den Wandler (Weglassen der Methode 'ConvertBack':

public class ScreenWidthToLeftBarWidth : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      double aValue = (double)value; 
      GridLength newWidth = new GridLength(aValue); 
      return (newWidth); 
     } 
    } 

Nun, ich habe in der Lage erfolgreich in einem leicht zu binden anderes Szenario der Verwendung eines 'Button' Objekte Breite und es durch einen Konverter laufen, So denke ich das Problem ist mit, wie ich versuche, von der "ElementName = System.Windows.SystemParameters" zu binden. Jede Hilfe geschätzt, danke

Antwort

2

ElementName ist für andere Elemente in XAML; Dazu benötigen Sie etwas wie x:Static, z.B.

Width="{Binding Source={x:Statc SystemParameters.PrimaryScreenWidth}, 
       Converter=...}" 
+0

Ich möchte, dass es dynamisch ist (es könnte Änderungsbenachrichtigungen geben, wenn der Benutzer ihre Bildschirmauflösung ändert, richtig?). Außerdem brauche ich einen Konverter, um den Wert dynamisch zu ändern. Irgendwelche Ideen zu einer alternativen Lösung? –

+0

@RuneStar: Sie können es in einer Bindung mit 'Source' verwenden (siehe Bearbeiten), um Änderungsbenachrichtigungen zu erhalten, die Sie abonnieren müssen (vielleicht auf Systemebene, ich weiß es nicht) und aktualisieren Sie dann die Bindung (zB über das 'BindingExpression.UpdateTarget'). –