2012-04-01 111 views
0

我想System.Windows.SystemParameters.PrimaryScreenWidth Width屬性(一個「網格」內,從)綁定到一個ColumnDefinition的,並使用轉換器轉換'PrimaryScreenWidth'轉換爲'GridLength'。但它永遠不會進入'轉換'代碼。WPF從System.Windows.SystemParameters.PrimaryScreenWidth綁定一個轉換器

這裏是我的XAML:

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

這裏是我的轉換代碼隱藏(而忽略了「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); 
     } 
    } 

現在,我已經能夠在一個稍微成功綁定使用'按鈕'對象的不同場景寬度和通過轉換器運行它,所以我想這個問題是與我想如何綁定從「ElementName = System.Windows.SystemParameters」。任何幫助表示讚賞,謝謝。

回答

2

ElementName用於XAML中的其他元素;爲此,您需要諸如x:Static之類的東西,例如

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

我希望它是動態的(如果用戶更改屏幕分辨率,可能會發生更改通知,對不對?)。另外,我需要一個轉換器來隨着它的動態變化來改變它的值。關於備用解決方案的任何想法? – 2012-04-01 01:45:45

+0

@RuneStar:你可以在與'Source'的綁定中使用它(請參閱編輯),以獲取需要訂閱某個事件(可能在系統級別,我不知道)的更改通知,然後更新綁定例如通過'BindingExpression.UpdateTarget')。 – 2012-04-01 01:55:20