关于 wpf:如何在不使用 ViewBox 的情况下保持嵌套网格正方形?

How to keep a nested grid square without using ViewBox?

这类似于how-do-i-keep-aspect-ratio-on-scalable-scrollable-content-in-wpf,但有以下区别:

  • 我想避免 ViewBox 的副作用 - 虽然在容器调整大小时网格应该调整大小,但某些网格内容应该保持它们的大小(例如按钮)。
  • 我不需要 1:1 以外的纵横比(也许可以使用一些绑定技巧?)
  • 后面的代码还可以,但如果可能的话,我想避免创建另一个容器

  • 您只需要将参数 WidthHeight 之一绑定到另一个:

    1
    <Image x:Name="image" Height="{Binding Width, ElementName=image}"/>

    您应该将 Grid 的 Width 和 Height 绑定到一个值:

    1
    2
    <!--Dont forget to specify source where MaxSizeParam lies-->
    <Grid Width="{Binding MaxSizeParam}" Height="{Binding MaxSizeParam}"/>

    MaxSizeParam 您可以在任何地方以您想要的方式提供。例如,如果网格有 Button,那么在 Button 的 SizeChanged 事件上,您应该重新计算 MaxSizeParam:

    1
    2
    3
    4
    5
    6
    void button_SizeChanged(object sender, SizeChangedEventArgs e)
            {
                MaxSizeParam = e.NewSize.Width > e.NewSize.Height ? e.NewSize.Width : e.NewSize.Height;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("MaxSizeParam"));
            }