2016-11-22 37 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」的網格行會導致很多佈局計算。特別是當它們已經在視覺樹中之後改變控制尺寸時。 您的佈局運行**將會很慢。

我建議你找出更好的解決方案。例如,一旦佈局引擎計算出該設備的單元格寬度,將一個固定高度應用於網格行。