假设我们有一个简单的窗口:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Width="300" Height="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Grid.Row="0" Margin="2,2,2,2">
<TextBlock
Text="Button 1.
It has some text.
Button shouldn't shrink less then the text size."
TextWrapping="WrapWithOverflow" />
</Button>
<Button Grid.Row="1" Content="Button 2" Margin="2,2,2,2" />
</Grid>
</Window>
所需的布局应如下所示:
在文本中:使行高与MinHeight
等于它的Auto
高度成比例(*)。换句话说,将Height
设为Max(1*,Auto)
。
我假设如果WPF设置为Auto
时能够自动确定行的大小,那么应该有一种方法使它在按比例调整大小时尊重该大小。
我找到了一些相关的问题(1,2),但无法将那里使用的技术适应我的情况。
目前唯一的结果是
Button.MinHeight
到嵌套的TextBlock.ActualHeight
MinHeight
,将其设置为RowDefinition.MinHeight
。因为按钮比文本块大,所以显得block脚。是否可能需要与Measure & Arrange
相关的内容?还是不值得付出努力,最好手动放置MinHeight
(并且本地化字符串的长度差异也存在一些问题)?
答案 0 :(得分:1)
这是一个快速简便的技巧。
复制控件(并将其隐藏)并使用其度量值来找到MinHeight
:
<Grid>
<Grid x:Name="dummyControl" VerticalAlignment="Center">
<Button Grid.Row="0" Margin="2,2,2,2" Visibility="Hidden" IsHitTestVisible="False">
<TextBlock
Text="Button 1.
It has some text.
Button shouldn't shrink less then the text size."
TextWrapping="WrapWithOverflow" />
</Button>
</Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition MinHeight="{Binding ElementName=dummyControl, Path=ActualHeight}" Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Grid.Row="0" Margin="2,2,2,2">
<TextBlock
Text="Button 1.
It has some text.
Button shouldn't shrink less then the text size."
TextWrapping="WrapWithOverflow" />
</Button>
<Button Grid.Row="1" Content="Button 2" Margin="2,2,2,2" />
</Grid>
</Grid>
VerticalAlignment
中的 dummyControl
应该不是Stretch