0
我想知道如何在调整大小时保持WPF窗口的宽高比(即:16x9) - 如果可能的话,可以利用MVVM。由于我是MVVM和WPF的新手,我不确定从哪里开始。谢谢。WPF窗口长宽比
我想知道如何在调整大小时保持WPF窗口的宽高比(即:16x9) - 如果可能的话,可以利用MVVM。由于我是MVVM和WPF的新手,我不确定从哪里开始。谢谢。WPF窗口长宽比
这可能很难用“纯粹的”MVVM实现,因为您需要知道调整大小发生的方向(水平或垂直)。请注意,如果两者都一次更改(即用户通过拖动角来调整大小),则需要决定使用哪些。
在你的ViewModel中,你可能会有一个名为AspectRatio的属性。
在您的视图中,您很可能会覆盖OnRenderSizeChanged事件。无论您是使用ViewModel中的属性来完成视图中的工作,还是将值传递给ViewModel中的某个属性来完成工作,并将其绑定到新值,它都是一种品味问题。
例1:在这里做的工作
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
{
if (sizeInfo.WidthChanged)
{
this.Width = sizeInfo.NewSize.Height * mViewModel.AspectRatio;
}
else
{
this.Height = sizeInfo.NewSize.Width * mViewModel.AspectRatio;
}
}
例2:不要在视图模型
View.xaml.cs
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
{
if (sizeInfo.WidthChanged)
{
viewModel.AspectWidth = sizeInfo.NewSize.Width;
}
else
{
viewModel.AspectHeight = sizeInfo.NewSize.Height;
}
}
ViewModel.cs
public Double AspectWidth
{
get { return mAspectWidth; }
set
{
// Some method that sets your property and implements INotifyPropertyChanged
SetValue("AspectWidth", ref mAspectWidth, value);
SetValue("AspectHeight", ref mAspectHeight, mAspectWidth * mAspectRatio);
}
}
public Double AspectHeight
{
get { return mAspectHeight; }
set
{
// Some method that sets your property and implements INotifyPropertyChanged
SetValue("AspectHeight", ref mAspectHeight, value);
SetValue("AspectWidth", ref mAspectWidth, mAspectHeight* mAspectRatio);
}
}
而且你的观点(例如2)的工作将结合窗口宽度和高度与视图模型中的AspectWidth和AspectHeight属性相关联。
View.xaml
<Window Width="{Binding AspectWidth}"
Height="{Binding AspectHeight}">
</Window>
因此,在任何情况下,您都会覆盖OnRenderSizeChanged。有关如何实施该方法的详细信息取决于您的口味。我猜这个例子#2更接近于纯粹的“MVVM”,但在这种情况下它也可能是矫枉过正的。