我有一个WPF应用程序,其布局由顶级Grid
中的3行组成。
我希望中间行占用它所需的空间(它所需的最大空间是有限的,但取决于窗口的宽度)。 底行应占用剩余空间。 棘手的部分是顶行。 它的大小可以根据按钮切换大部分内容的可见性而变化。我希望它最多使用50%的高度但不超过它真正需要的高度。 以下XAML描述了我想要完成的任务:
<Grid.RowDefinitions>
<!-- neither "1*" nor "Auto" fully meets my needs -->
<RowDefinition Height="Min(1*,Auto)"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="1*"></RowDefinition>
</Grid.RowDefinitions>
行是:
WrapPanel
WrapPanel
TextBox
如果这很重要。
答案 0 :(得分:8)
如果我理解正确,您可以使用Auto
,然后将MaxHeight
属性绑定到Height
的{{1}}。也许是这样的:
MaxHeightConverter.cs:
Grid
MyWindow.xaml:
public class MaxHeightConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
throw new ArgumentException("MaxHeightConverter expects a height value", "values");
return ((double)value / 2);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
希望这有帮助。
答案 1 :(得分:7)
另一种只使用XAML的方法就是绑定到你想要的高度的隐藏对象:
<Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Border Background="White" Visibility="Hidden" x:Name="HalfHeightRow" x:FieldModifier="private" />
</Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Height="1000" Background="Red" MaxHeight="{Binding ActualHeight, ElementName=HalfHeightRow}" />
<Border Grid.Row="1" Height="100" Background="Green" />
<Border Grid.Row="2" Background="Blue" />
</Grid>
答案 2 :(得分:1)
您可以使Matt的建议更加简单明了。
<script>
// Initialize and add the map
function initMap() {
// The location of Uluru
var uluru = {lat: <?php echo $longitude?>, lng: <?php echo $latitude; ?>};
// The map, centered at Uluru
var map = new google.maps.Map(
document.getElementById('map'), {zoom: 12, center: uluru});
// The marker, positioned at Uluru
var marker = new google.maps.Marker({position: uluru, map: map});
}
</script>