如何根据View当前显示的窗口设置MainWindow的位置?
我使用DataTemplates选择正确的View并将其作为内容实现到MainWIndow。
例如。
<ContentControl>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding LoginViewM.Content}" Value="">
<Setter Property="Content">
<Setter.Value>
<SP:SplashViewModel/>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding LoginViewM.Content}" Value="Admin">
<Setter Property="Content">
<Setter.Value>
<EE:EmployeeViewModel/>
</Setter.Value>
</Setter>
</DataTrigger>
取决于实现哪个视图,我想设置MainWindow位置。我可以将Top
和Left
绑定到主ViewModel中的属性,但问题出在View的ActualHeight
和ActualWidth
上。我无法从ViewModel获取它。
在WinForm中我使用SystemParameters.WorkArea.Width/Height
和MVVM?
_Left = SystemParameters.WorkArea.Width - ActualWidth
非常感谢您的任何建议。
答案 0 :(得分:1)
您可以在视图模型中绑定MainWindow
到Width
和Height
属性。这是一个例子:
private double _WindowWidth = 500;
public double WindowWidth
{
get { return _WindowWidth; }
set
{
_WindowWidth = value;
//INotifyPropertyChanged stuff.
OnPropertyChanged();
}
}
在View
:
Width="{Binding WindowWidth}"
使用WindowWidth
属性,您可以拥有Left
和Top
的其他媒体资源。
private double _WindowLeft = 150;
public double WindowLeft
{
get { return _WindowLeft ; }
set
{
_WindowLeft = value;
//INotifyPropertyChanged stuff.
OnPropertyChanged();
}
}
就像之前一样,你可以绑定到属性:
Left="{Binding WindowLeft}"
此方法的好处是您现在可以访问查看模型<中的Windows Left
,Top
,Width
和Height
属性/ strong>即可。因此,您可以执行逻辑,在构造函数中调整视图的大小/重定位,或者在视图模型中需要它。
考虑将这些属性放在基类中,因此所有View Model都可以从类继承而无需实现属性。