首页 > 解决方案 > WPF 应用程序未在运行时更新其 Window.Left 属性

问题描述

我试图让我的 wpf 应用程序在加载时占用我的右侧监视器。我的方法是创建一个存储屏幕宽度值(作为双精度值)的属性,然后将其绑定到 Window.Left 属性。但无论我做什么,应用程序窗口都不会移动到我的右侧显示器。

这是我的 xaml

<Window x:Class="Foo.FooView"
        .. declarations
        Title="{Binding Title}" 
    Left="{Binding ScreenOffset, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
        Height="800"
    Width="1920"
        SnapsToDevicePixels="True">

在我的视图模型中:

    public double ScreenOffset
    {
        get
        {
            return _screenOffset;
        }
        set
        {
            if (_screenOffset != value)
            {
                _screenOffset = value;
                RaisePropertyChanged(nameof(ScreenOffset));
            }
        }
    }
    private double _screenOffset = 0.0;

    public FooViewModel()
    {
        ScreenOffset = Application.Current.MainWindow.Width + defaultOffset; 
        //Application.Current.MainWindow.Width = 1920
        //defaultOffset = 10.0
    }

我的数据绑定适用于我的应用程序中的其他控件。唯一似乎不起作用的绑定只是 Left 属性。谁能看到我做错了什么?提前谢谢了。

标签: c#wpf

解决方案


您可以尝试将以下代码放入您的视图模型中:

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public double ScreenOffset
    {
        get
        {
            return _screenOffset;
        }
        set
        {
            if (_screenOffset != value)
            {
                _screenOffset = value;
                NotifyPropertyChanged();
            }
        }
    }

推荐阅读