如何在不使用ViewBox的情况下保持嵌套网格方块?

时间:2010-07-30 08:35:41

标签: wpf silverlight xaml layout

这与how-do-i-keep-aspect-ratio-on-scalable-scrollable-content-in-wpf类似,但有以下不同之处:

  1. 我想避免ViewBox的副作用 - 当网格应该在容器调整大小时调整大小,一些网格内容应该保持其大小(例如按钮)。
  2. 我不需要1:1以外的宽高比(也许可以使用一些绑定技巧?)
  3. 背后的代码是好的,但如果可能的话,我想避免创建另一个容器

2 个答案:

答案 0 :(得分:1)

您应该将网格的宽度和高度绑定到一个值:

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

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

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"));
        }

答案 1 :(得分:1)

您只需要将其中一个参数WidthHeight绑定到另一个:

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