Binding wpf窗口宽度未绑定

Binding wpf窗口宽度未绑定,binding,Binding,我想通过ViewModel控制一个窗口的高度和宽度 这似乎很简单 <Window ... Width="{Binding Path=Width}" Height="{Binding Path=Height}" /> 但是没有。它不起作用 它检查ViewModel的宽度,但不检查高度 奇怪的是,如果我在XAML中切换宽度和高度的顺序,它会检查高度,而不是宽度。i、 e.它只检查两个属性中的第一个,而完全忽略第二个属性 绑定MaxHeight和MinHeight可以工作,即使在宽度

我想通过ViewModel控制一个窗口的高度和宽度

这似乎很简单

<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中看到反映的结果。。有人能让它正常工作吗?