Положение окна WPF

Окно WPF запускается с WindowState="Maximized". Если сразу после запуска посмотреть Left или Top окна то они будут равны -8. Собственно вопрос, как получить это значение при выполнении программы? Я так понял они определяются темой. Можно конечно при первом отображении окна запомнить эти значения и использовать, а можно ли как-то по другому это сделать? Через SystemParameters тоже ничего получить не удалось. На скриншоте LiveTree и в диспетчере свойств видно -8. Как добраться до этих значений из кода? введите сюда описание изображения


Ответы (1 шт):

Автор решения: aepot

Записывать измененя Left и Top можно по событию окна LocationCahnged

Например, если у вас MVVM, то в кодбихайнд можно добавить и подключить к окну обработчик

MainWindow.xaml.cs

private void Window_LocationChanged(object sender, EventArgs e)
{
    MainViewModel vm = DataContext as MainViewModel;
    vm.WindowX = Left;
    vm.WindowY = Top;
}

и подключить его

LocationChanged += Window_LocationChanged

А в MainViewModel добавить эти свойства

MainViewModel.cs

private double _windowX;
private double _windowY;
public double WindowX
{
    get => _windowX;
    set
    {
        _windowX = value;
        OnPropertyChanged(nameof(WindowX));
    }
}
public double WindowY
{
    get => _windowY;
    set
    {
        _windowY = value;
        OnPropertyChanged(nameof(WindowY));
    }
}

И уже к этим свойствам можно будет прибиндить все что угодно.

Возможно, с точки хрения MVVM это не совсем правильно, но пока в голову ничего другого не идет.

→ Ссылка