WPF:如果纵横比> 16:9,则拉伸矩形,否则缩放

时间:2019-03-05 00:28:50

标签: c# wpf layout scaling aspect-ratio

我试图在窗口中的网格中放置一个矩形,该矩形会定期更改大小。我不是使用绝对值,而是使用比率。

因此,矩形相对于窗口/网格可能具有三种状态:

  • 窗口的默认纵横比为16:9。如果窗口具有该大小,则矩形应完全适合窗口,并填满窗口;
  • 如果窗口的宽度大于该宽度,则矩形应随其延伸。 (因此,如果窗口的宽高比> 16/9,则矩形会拉伸其宽度,从而仍然填充整个窗口);
  • 如果窗口的高度大于16:9的比例,则内部矩形应(1)不垂直拉伸,并且(2)与网格底部对齐。

This image explains it a lot clearer

我正在寻找一种解决方案,除非没有其他方法,否则不涉及更改XAML以外的代码(因此.cs文件中没有内容)。我确实尝试过使用C#代码找到解决方案:

RectName_OnSizeChanged(object sender, SizeChangedEventArgs) {
    RectName.MaxHeight = 9/16 * RectName.Width;
}

但是它似乎不起作用。 (那是为什么,这是我的奖金问题)

1 个答案:

答案 0 :(得分:0)

如何?

<Grid Background="CornflowerBlue" SizeChanged="ParentSizeChanged">
    <Rectangle x:Name="theRect" Fill="Blue" HorizontalAlignment="Left" VerticalAlignment="Bottom" />
</Grid>

这:

private void ParentSizeChanged(object sender, SizeChangedEventArgs e)
{
    var parent = sender as FrameworkElement;
    if (parent == null)
        return;
    theRect.Width = parent.ActualWidth;
    theRect.Height = Math.Min(parent.ActualHeight, parent.ActualWidth * 6 / 9);
}