代码之家  ›  专栏  ›  技术社区  ›  Sergey Aldoukhov

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

  •  0
  • Sergey Aldoukhov  · 技术社区  · 14 年前

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

    1. 我想避免视图框的副作用-虽然当容器调整大小时网格应该调整大小,但是一些网格内容应该保持它们的大小(例如按钮)。
    2. 除了1:1之外,我不需要长宽比(也许可以使用一些绑定技巧?)
    3. 代码隐藏是可以的,但是如果可能的话,我想避免创建另一个容器
    2 回复  |  直到 12 年前
        1
  •  1
  •   Danail Nachev    12 年前

    您只需要绑定其中一个参数 Width Height 对另一个:

    <Image x:Name="image" Height="{Binding Width, ElementName=image}"/>
    
        2
  •  1
  •   Eugene Cheverda    14 年前

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

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

    maxsizeparam您可以以您想要的方式在任何地方提供。例如,如果网格有按钮,则在按钮的sizeChanged事件上,应重新计算maxsizegram:

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