2016-11-22 40 views
0

假设我在xaml中有一个Image标签,并且想要以正方形大小。xamarin form:控件能绑定自己吗?

<Grid HorizontalOptions="Fill"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="auto"> 
        </RowDefinition> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"></ColumnDefinition> 
        <ColumnDefinition Width="*"></ColumnDefinition> 
        <ColumnDefinition Width="*"></ColumnDefinition> 
        <ColumnDefinition Width="*"></ColumnDefinition> 
       </Grid.ColumnDefinitions> 
       <Image></Image> 
       <Image></Image> 
       <Image></Image> 
       <Image></Image> 
      </Grid> 

此处的演示代码有4个图像将它们水平放置在网格中。宽度将被等同地定义。所以我希望高度和宽度一样。我能约束自己,这样

<Image x:Name="img" BindingContext="{x:Reference img}" WidthRequest="{Binding HeightRequest}" Grid.Column="1" Grid.Row="0"> 

回答

0

除非你专门在代码中设置别的地方,你WidthRequest将是-1,表明控制没有明确说明它想有什么宽度,而是依靠布局系统来锻炼正确的尺寸。

因此,这种绑定,虽然技术上是正确的,将是无用的。 您可以尝试绑定到Width属性,该属性是一旦布局控件后,将使用实际尺寸更新的只读属性。

您也可以覆盖相应的事件并在其中指定所需的高度。

请记住,height =“Auto”的网格行会导致很多布局计算。特别是当它们已经在视觉树中之后改变控制尺寸时。 您的布局运行**将会很慢。

我建议你找出更好的解决方案。例如,一旦布局引擎计算出该设备的单元格宽度,将一个固定高度应用于网格行。