Wpf 窗口高度双向绑定问题

Wpf 窗口高度双向绑定问题,wpf,binding,window,Wpf,Binding,Window,下面是我的代码 public partial class MainWindow : Window, INotifyPropertyChanged { private int myHeight = 0; public int MyHeight { get { return myHeight; } set { myHeight = val

下面是我的代码

 public partial class MainWindow : Window, INotifyPropertyChanged
    {
        private int myHeight = 0;

        public int MyHeight
        {
            get { return myHeight; }
            set
            {
                myHeight = value;
                OnPropertyChanged("MyHeight");
                MessageBox.Show("MainWindowHeight" + MyHeight);
            }
        }

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
        }
        private void OnPropertyChanged(string prop)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(prop));
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }

<Window x:Class="Window_Sample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="{Binding MyHeight, Mode=TwoWay}" Width="525">

    <Grid>

    </Grid>
</Window>
当我将windowstate从minimized更改为maximized时,setter会被调用两次,第一次调用它的实际值是正确的,第二次调用它的实际值是38,对此行为有何解释?还有为什么它会被呼叫两次

谢谢,
Kumar

如果您查看两次访问属性的调用堆栈,您将看到第二次调用通过一个名为UpdateDimensionsStoreBounds的函数。在这个网站上做搜索让我来到了这里

关于该功能的评论指出,当窗口最大化或最小化时,其目的是让属性在未最大化或最小化时保持价值。看起来这是两个调用的原因,第二个是设置它们在未最大化或最小化时的值

如果你想知道窗户的高度,你可以用

double renderedHeight = Application.Current.MainWindow.ActualHeight;

希望这对您有所帮助

如果您查看两次访问属性的调用堆栈,您将看到第二次通过名为UpdateDimensionsStoreBounds的函数。在这个网站上做搜索让我来到了这里

关于该功能的评论指出,当窗口最大化或最小化时,其目的是让属性在未最大化或最小化时保持价值。看起来这是两个调用的原因,第二个是设置它们在未最大化或最小化时的值

如果你想知道窗户的高度,你可以用

double renderedHeight = Application.Current.MainWindow.ActualHeight;
希望这有帮助