2012-12-09 55 views
4

我有一個2列和2行的網格。單個字符(Unicode U + 2699)被放置在右下方的網格區域內。它看起來像這樣:如何將字體大小綁定到變量網格大小

Grid currently

我倒是像的字符自動地調整其字體大小以適合它被放置在網格場(在這種情況下,它應該被結合到第二高度網格行,但由於在某些情況下可能不清楚網格的高度或寬度是否較小,因此知道如何綁定到這兩個值的最低值也是很好的)。

我實現迄今類似如下(我簡化了一點在這個例子中):

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition x:Name="heightToBind" Height="40"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="14*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <Button FontSize="{Binding ElementName=heightToBind, Path=Height.Value, Mode=OneWay}" Content="&#x2699;" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Right" /> 
</Grid> 

這裏的問題是,它只能如果高度是固定值內RowDefinitions。我希望它有以下定義工作:

<Grid.RowDefinitions> 
    <RowDefinition Height="4*"/> 
    <RowDefinition x:Name="heightToBind" Height="*"/> 
</Grid.RowDefinitions> 

作爲獎勵的問題我倒是也有興趣爲什麼它可能是該字符被放置太低,所以它在底部被截斷(我試過VerticalAlignment="Center"的按鈕,但沒有效果)。

回答

5

您可以嘗試使用一個ViewBox作爲按鈕的內容:

<Button Grid.Row="1" Grid.Column="1"> 
    <Button.Content> 
     <Viewbox StretchDirection="Both" HorizontalAlignment="Stretch"> 
      <TextBlock Text="&#x2699;" /> 
     </Viewbox> 
    </Button.Content> 
</Button> 

一個ViewBox可以拉伸和縮放自己的孩子,以填補所有可用空間...

+0

謝謝!這正是我一直在尋找的:) – Samuel

1

你可以到ActualHeight代替Height嘗試綁定:

<Button FontSize="{Binding ElementName=heightToBind, Path=ActualHeight.Value, Mode=OneWay}" 
     Content="&#x2699;" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Right" /> 

這應該工作。

網格定義上的*表示將可用空間作爲高度,因此只有在頁面佈局已準備好佈局時纔會確定。如果高度未設置或更改,則實際高度將返回到ActualHeight屬性中。

+0

我也試過您的解決方案,但角色並沒有像使用Blachshma的答案那樣使用整個行的高度。無論如何謝謝你的回答! – Samuel