我在WPF中有一个窗口,它是窗口的所有者,它是所有其他窗口的所有者。尽量减少WPF中的子窗口当子窗口的所有者窗口最小化时
主要所有者(sideWindow
)仅为200点宽度放置在左侧,另一个窗口放置在主窗口的右侧。 sideWindow
有作为右窗口的子窗口打开窗体的按钮。
当我最小化主窗口(sideWindow
)时,只有右窗口最小化,其余子窗口没有最小化。
我该如何做到这一点?
我在WPF中有一个窗口,它是窗口的所有者,它是所有其他窗口的所有者。尽量减少WPF中的子窗口当子窗口的所有者窗口最小化时
主要所有者(sideWindow
)仅为200点宽度放置在左侧,另一个窗口放置在主窗口的右侧。 sideWindow
有作为右窗口的子窗口打开窗体的按钮。
当我最小化主窗口(sideWindow
)时,只有右窗口最小化,其余子窗口没有最小化。
我该如何做到这一点?
我必须做一点点猜测这里,我真的不知道你的程序的体系结构。我将假设您有两个Windows类:MainWindow和SideWindow和单视图模型类AppVm。如果你有不同的设置,你将不得不适应。
最简单的解决方案是将两个窗口的WindowState绑定到ViewModel中的单个属性。确保该财产激发通知。
视图模型类:
class AppVm : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
private WindowState m_state;
public WindowState state {
get { return m_state; }
set { m_state=value; raise("state") }
}
private raise(string propname) {
PropertyChanged(this, new PropertyChangedEventArgs(propname));
}
....
}
现在,在Windows XAML文件,绑定的WindowState到一个在视图模型:我
<Window ... WindowState="{Binding Path=state,Mode=TwoWay} ...>
注意如何将模式设置为双向。这可以确保当使用单击最小化窗口时更改状态时,它也会更改虚拟机中的值。就这样。
现在,如果你的架构不同,你将不得不适应。当用户使其中一个窗口最大化时(你甚至允许它),你不知道你想要做什么。如果每个窗口有两个不同的视图模型类,则可以写下更复杂的路径,假设一个视图具有对其他视图的引用,将stae变量仅保存在内部类中,则绑定语句可以是:Path = OtherVm.state。
如果您的查看逻辑比较复杂,那么在视图(* .xaml.cs文件)中放置一些代码是可以的。唯一的规则是视图模型不应该“察觉”视图(理论上,虚拟机也可以运行“单元测试视图”)。您可以订阅视图的事件StateChanged并在那里写下您的逻辑。无论如何,上面的示例代码描述了最干净的解决方案。
希望这有助于。
您应该使用消息传递解决方案来达到您想要的效果。 GalaSofts MVVM灯具有内置的Messenger。如果你最小化你的窗口,我想你可以用一个命令来完成它,然后在ViewModel中,你可以发送消息,其他人可以订阅这个消息,并最小化Windows。我想还有其他的Messenger解决方案也只是尝试谷歌它。
我不清楚问题是什么。是否其他孩子的窗户被最小化了,你不想让他们成为,或者他们不是,而你呢? – ChrisF 2012-01-16 13:37:26
我希望所有的窗口最小化时,我最小化mainWindow – 2012-01-16 13:38:22