Добрый день всем.
В приложении существует N-е количество диалоговых окон. Все должны появляться c WindowStartupLocation.CenterOwner.
Размеры некоторых из них могут быть изменены пользователем. Хочется запоминать эти размеры и восстанавливать их при следующем появлении диалога. Собственно, с запомнить/восстановить проблем нет.
Суть вопроса.
Контекст данных окна предоставляет 2 свойства — Height и Width. В XAML окна эти свойства связаны с соответствующими свойствами окна:
WindowStartupLocation="CenterOwner"
Height="{Binding Height, Mode=TwoWay}"
Width="{Binding Width, Mode=TwoWay}"
Когда диалог появляется на экране, то его позиция совсем не CenterOwner. Если убрать binding и задать в качестве ширины и высоты окна константы, то все в порядке.
Погуглил. На эту тему существует безответное
обращение в connect'е и пара безответных постов на форумах.
Ладно, решил плюнуть на WindowStartupLocation.CenterOwner, установить WindowStartupLocation.Manual, вычислить Left и Top окна (благо, есть доступ к окну-владельцу), выставить их как read-only свойства контекста и привязать их:
WindowStartupLocation="Manual"
Height="{Binding Height, Mode=TwoWay}"
Width="{Binding Width, Mode=TwoWay}"
Left="{Binding Left, Mode=OneTime}"
Top="{Binding Top, Mode=OneTime}"
Работает наполовину.
Т.е. если первым идет binding свойства Left, то корректно устанавливается Left окна, а getter свойства Top контекста просто не вызывается.
Если их поменять местами, то корректно установится Top, при этом не вызовется getter свойства Left. Mode=OneWay работает аналогично.
Что я делаю не так?