Binding wpf窗口宽度未绑定
我想通过ViewModel控制一个窗口的高度和宽度 这似乎很简单Binding wpf窗口宽度未绑定,binding,Binding,我想通过ViewModel控制一个窗口的高度和宽度 这似乎很简单 <Window ... Width="{Binding Path=Width}" Height="{Binding Path=Height}" /> 但是没有。它不起作用 它检查ViewModel的宽度,但不检查高度 奇怪的是,如果我在XAML中切换宽度和高度的顺序,它会检查高度,而不是宽度。i、 e.它只检查两个属性中的第一个,而完全忽略第二个属性 绑定MaxHeight和MinHeight可以工作,即使在宽度
<Window ... Width="{Binding Path=Width}" Height="{Binding Path=Height}" />
但是没有。它不起作用
它检查ViewModel的宽度
,但不检查高度
奇怪的是,如果我在XAML中切换宽度
和高度
的顺序,它会检查高度
,而不是宽度
。i、 e.它只检查两个属性中的第一个,而完全忽略第二个属性
绑定
MaxHeight
和MinHeight
可以工作,即使在宽度之后。但是用户不能重新调整窗口的大小。我也有这个问题,它看起来像一个bug
目前,我正在处理窗口的DataContextChanged事件,并从ViewModel手动设置宽度和高度。不知道ViewModel代码是什么样子,但请尝试创建宽度和高度属性集,并将绑定模式设置为双向。这在设计上是正确的(虽然很遗憾,但却是正确的)。布局系统实际上并不强制执行这些值,请参阅msdn文档页上有关Window.Height的备注。。。
在某些情况下,可以设置MinWidth和MaxWidth(resp.*Height)以实现类似的行为,但并不总是如此
抱歉,没有更好的消息…在窗口的加载事件中应该有类似的内容:
public void AfterLoad()
{
this.Height = this.ViewModel.Settings.WindowHeight;
this.Width = this.ViewModel.Settings.WindowWidth;
if (this.ViewModel.Settings.WindowTop > 0 && this.ViewModel.Settings.WindowLeft > 0)
{
this.Top = this.ViewModel.Settings.WindowTop;
this.Left = this.ViewModel.Settings.WindowLeft;
}
}
然后,处理窗口的“大小更改”事件以记住窗口的宽度和高度,以及更改的位置以记住顶部、左侧(如果愿意)
绑定到WindowsState效果很好。您希望绑定到实际高度和实际宽度,而不是高度和宽度
因此,不是:
<Window ... Width="{Binding Path=Width}" Height="{Binding Path=Height}" />
你想要:
<Window ... Width="{Binding Path=ActualWidth}" Height="{Binding Path=ActualHeight}" />
我假设您正在使用MVVM模式和常用方法,通过在ViewModel中实现InotifyPropertyChanged接口,将任何已更改的属性从ViewModel提升到视图
不工作:
WdwWidth = 600;
WdwHeight = 600;
RaisePropertyChanged("WdwWidth");
RaisePropertyChanged("WdwHeight");
WdwWidth = 600;
RaisePropertyChanged("WdwWidth");
WdwHeight = 600;
RaisePropertyChanged("WdwHeight");
工作:
WdwWidth = 600;
WdwHeight = 600;
RaisePropertyChanged("WdwWidth");
RaisePropertyChanged("WdwHeight");
WdwWidth = 600;
RaisePropertyChanged("WdwWidth");
WdwHeight = 600;
RaisePropertyChanged("WdwHeight");
在我看来,PropertysChanged通知必须在属性实际更改后立即发出。
很奇怪,但这对我来说很有用
编辑:确保将绑定设置为双向,例如Height=“{Binding Path=WdwHeight,Mode=TwoWay}”
oh,并查看正确的。只需在Settings.Default.WindowHeight.Thank中添加“Default”,这条评论似乎是唯一适合我的想法,但我仍然认为我们应该能够正确地更改绑定,并在UI中看到反映的结果。。有人能让它正常工作吗?