可以在XAML中使用百分比值吗?

时间:2011-03-26 01:49:19

标签: xaml

在html中可以说width =“20%”。当然,XAML中不允许这样做。有谁知道为什么在XAML中有或没有办法获得百分比值支持?

3 个答案:

答案 0 :(得分:54)

Grid ColumnDefinitions和RowDefinitions允许比例单位(除了固定像素和Auto)。

以下是两个例子:

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="Auto" />
  <ColumnDefinition Width="20" />
  <ColumnDefinition Width="*" />
  <ColumnDefinition Width="*"/>
  <ColumnDefinition Width="*"/>
  <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

第一列将尽可能大,以适合列中的所有内容。下一列是20个与设备无关的像素宽。网格的剩余宽度将在其余列中平均分配。 (100%/ 4 =每个25%)

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="*" />
  <ColumnDefinition Width="4*"/>
  <ColumnDefinition Width="4*"/>
  <ColumnDefinition Width="*"/> 
</Grid.ColumnDefinitions>

此代码将4列分为总网格宽度的10%,40%,40%和10%。

答案 1 :(得分:0)

最好采用编程方式解决该问题。

为元素分配一半屏幕尺寸的示例:

var deviceScreenHeight = DeviceDisplay.MainDisplayInfo.Height;
view.HeightRequest = deviceScreenHight * .5; 

限制是它不能直接通过绑定到XAML来应用,但是可以轻松解决相关的问题,并且可以分配给任何视图维度(当然)。始终了解事物的复杂应用是基于这样的简单计算,因此很容易应用。可以将其应用于继承类,该继承类根据任何百分比计算来使高度或宽度超载。

答案 2 :(得分:0)

如果您不使用网格,那么您可以使用 Xamarin.Essentials 获取以像素为单位的实际宽度/高度,然后除以密度并乘以所需的尺寸

Convert.ToInt32(Math.Round(DeviceDisplay.MainDisplayInfo.Width / DeviceDisplay.MainDisplayInfo.Density * 0.9))

以像素/密度为单位的实际屏幕宽度 * 所需的百分比

我的示例是屏幕宽度的 90%,您可以在来自 Xaml 的 VM 中绑定到此计算

XML

<StackLayout WidthRequest="{Binding PickerWidth}" BackgroundColor="AliceBlue">
    <Label Text="Test" HorizontalOptions="FillAndExpand"/>
</StackLayout>

虚拟机

private int _pickerWidth;
public int PickerWidth
{
     get => _pickerWidth;
     set => SetProperty(ref _pickerWidth, value);
}

public void Init()
{
   PickerWidth = Convert.ToInt32(Math.Round(DeviceDisplay.MainDisplayInfo.Width / DeviceDisplay.MainDisplayInfo.Density * 0.9))
}

我刚刚开始将它用于使用 XF 4.8 在 iOS 和 Android 上运行的应用程序,它可以正常工作以将弹出页面的大小调整为可用屏幕宽度的 90%

在平板电脑和手机上测试