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;
希望这有帮助