wpf窗口宽度没有约束
我想通过我的ViewModel控制我的一个窗口的高度和宽度。wpf窗口宽度没有约束
这似乎很简单。
<Window ... Width="{Binding Path=Width}" Height="{Binding Path=Height}" />
但没有。它不起作用。
它检查ViewModel的Width
而不是Height
。
奇怪的是,如果切换在XAML的Width
和Height
顺序它检查Height
而不是Width
。即它只检查两个属性中的第一个,完全忽略第二个属性。
绑定MaxHeight
和MinHeight
做功,即使在Width
之后。但是,用户无法重新调整窗口的大小。
我也有这个确切的问题,它看起来像一个错误。
现在我只是处理窗口的DataContextChanged事件,并手动设置ViewModel的宽度和高度。
不知道您的视图模型的代码是什么样子,但尝试创造的宽度和高度的属性一组,并设置绑定模式为双向
这是由设计(可悲的,但真正的)正确。布局系统实际上并没有强制执行这些值,请参阅msdn文档页面上有关Window.Height的注释... 在某些情况下,可以将MinWidth和MaxWidth(resp。* Height)设置为实现类似的行为,但不总是。
对不起,有没有更好的消息...
哦,还请参见[this other thread](http://stackoverflow.com/questions/4806088/wpf-finding-position-of-maximized-window/6525577#6525577) – eFloh 2011-06-29 18:42:48
,你应该在你的窗口的Load事件是这样的:
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;
}
}
然后,处理窗口的大小改变事件记住widht和高度并且位置也改变为记住顶部,左侧(如果你愿意的话)。
绑定到WindowState工作正常。
正确。只需在Settings.Default.WindowHeight中添加“Default”即可。 – fab 2012-04-27 15:15:38
你想绑定到ActualHeight和ActualWidth,而不是高度和宽度。
所以不是:
<Window ... Width="{Binding Path=Width}" Height="{Binding Path=Height}" />
你想:
<Window ... Width="{Binding Path=ActualWidth}" Height="{Binding Path=ActualHeight}" />
我假设你正在使用MVVM模式与提高任何改变propertys从视图模型到视图的常用方法,通过在ViewModel中实现INotifiyPropertyChanged接口。
不工作:
WdwWidth = 600;
WdwHeight = 600;
RaisePropertyChanged("WdwWidth");
RaisePropertyChanged("WdwHeight");
工作:
WdwWidth = 600;
RaisePropertyChanged("WdwWidth");
WdwHeight = 600;
RaisePropertyChanged("WdwHeight");
在我看来,该PropertysChanged通知还有待提高之后的财产实际上已经改变了。奇怪的,但对我来说是诀窍。
编辑:确保将Binding设置为TwoWay,例如, Height="{Binding Path=WdwHeight, Mode=TwoWay}"
谢谢 - 这个评论似乎是唯一适用于我的想法,但我仍然认为我们应该能够改变绑定的属性并查看UI中反映的结果。任何人都可以正确地使用它。 – Chris 2014-10-16 22:23:13