XAML中是否可以使用百分比值?

tjrkku2a  于 2022-12-07  发布在  其他
关注(0)|答案(3)|浏览(198)

在html中可以说width=“20%"。当然这在XAML中是不允许的。有人知道为什么会这样吗?或者有没有办法在XAML中获得百分比值支持?

yzuktlbb

yzuktlbb1#

网格列定义和行定义允许使用比例单位(除了固定像素和自动之外)。
以下是两个示例:

<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%。

brtdzjyr

brtdzjyr2#

如果你没有使用网格,那么你可以使用Xamarin.Essentials来得到以像素为单位的真实的宽度/高度,然后除以密度,再乘以你想要的尺寸
也就是说

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

真实的屏幕宽度(像素/密度)* 所需百分比
我的示例是屏幕宽度的90%,您可以从Xaml绑定到VM中的此计算
克马尔

<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
在平板电脑和手机上测试

6jjcrrmo

6jjcrrmo3#

最好采用程序化的方式来解决问题。
将半屏幕大小指定给元素的示例:

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

其限制是不能通过直接绑定到XAML进行应用,但可以轻松解决相关问题,并可分配给任何视图维度(当然)。要始终明白,事物的复杂应用都是建立在像这样简单的计算基础上的,因此可以很容易地应用。您可以随意地将它应用于一个继承类,该继承类根据任何百分比计算重载高度或宽度。

相关问题