wpf窗口宽度没有约束

问题描述:

我想通过我的ViewModel控制我的一个窗口的高度和宽度。wpf窗口宽度没有约束

这似乎很简单。

<Window ... Width="{Binding Path=Width}" Height="{Binding Path=Height}" /> 

但没有。它不起作用。

它检查ViewModel的Width而不是Height

奇怪的是,如果切换在XAML的WidthHeight顺序它检查Height而不是Width。即它只检查两个属性中的第一个,完全忽略第二个属性。

绑定MaxHeightMinHeight做功,即使在Width之后。但是,用户无法重新调整窗口的大小。

我也有这个确切的问题,它看起来像一个错误。

现在我只是处理窗口的DataContextChanged事件,并手动设置ViewModel的宽度和高度。

+0

谢谢 - 这个评论似乎是唯一适用于我的想法,但我仍然认为我们应该能够改变绑定的属性并查看UI中反映的结果。任何人都可以正确地使用它。 – Chris 2014-10-16 22:23:13

不知道您的视图模型的代码是什么样子,但尝试创造的宽度和高度的属性一组,并设置绑定模式为双向

这是由设计(可悲的,但真正的)正确。布局系统实际上并没有强制执行这些值,请参阅msdn文档页面上有关Window.Height的注释... 在某些情况下,可以将MinWidth和MaxWidth(resp。* Height)设置为实现类似的行为,但不总是。

对不起,有没有更好的消息...

+0

哦,还请参见[this other thread](http://*.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工作正常。

+0

正确。只需在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}"