2012-04-01 4 views
0

Я пытаюсь связать System.Windows.SystemParameters.PrimaryScreenWidth с атрибутом ColumnDefinition (изнутри «Grid») и использовать конвертер для преобразования «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}}"/> 

Вот мой CodeBehind для преобразователя (оставляя метод '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); 
     } 
    } 

Теперь, я был в состоянии успешно связать в слегка другой сценарий использования объектов «Button». Ширина и запуск его через конвертер. Поэтому я думаю, что проблема связана с тем, как я пытаюсь связать себя с «ElementName = System.Windows.SystemParameters». Любая помощь оценивается, спасибо .

ответ

2

ElementName предназначен для других элементов в XAML; для этого вам понадобится что-то вроде x:Static, например.

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

Я бы хотел, чтобы он был динамическим (могут быть уведомления об изменениях, если пользователь меняет свое разрешение экрана, верно?). Кроме того, мне нужен конвертер для изменения значения по мере его динамического изменения. Любые идеи по альтернативному решению? –

+0

@RuneStar: вы можете использовать его в привязке к «Source» (см. Редактирование), чтобы получать уведомления об изменениях, которые вам нужно подписаться на какое-либо событие (возможно, на системном уровне, я не знаю), а затем обновить привязку (например, через 'BindingExpression.UpdateTarget'). –