gpt4 book ai didi

xaml - 强制 View 为正方形

转载 作者:行者123 更新时间:2023-12-02 07:42:37 24 4
gpt4 key购买 nike

我正在尝试在 XAML 中为 Xamarin Forms 创建一个 UI,其中我在网格内有一个框架(尽管我假设答案对于任何类型的 View 都是相同的)。我希望框架在它占据的网格单元中使用可用的全宽度,但我想强制它的形状为正方形。因此,我希望宽度自动调整大小,并将高度设置为匹配其实际宽度。

这是我到目前为止所拥有的:

  <Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="6*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="13*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>

<Button Grid.Row="0" Grid.Column="1"/>
<Button Grid.Row="1" Grid.Column="1"/>
<Button Grid.Row="2" Grid.Column="1"/>
<Frame Grid.Row="0" Grid.Column="3" Grid.RowSpan="3" OutlineColor="Silver" HorizontalOptions="Fill">
<Image />
</Frame>
</Grid>

目前,框架正确填充了可用宽度,但高度大约等于其左侧 3 个按钮的总高度。

我在想我可能需要将框架的 HeightRequest 绑定(bind)到它的实际宽度,但我不知道这是否可能,或者如果可能的话该怎么做。如果没有,还有其他选择吗?

最佳答案

由于您将框架的 RowSpan 设置为 3,因此即使您显式地将框架的 HeightRequest 设置为某个较小的值,框架仍将占据整个网格的高度。所以首先你必须防止这种情况发生。您可以通过将框架包含在其他 View 中来做到这一点。

现在,要使框架的高度和宽度与缩放时相同,您可以使用容器的 SizeChanged 事件并相应地设置框架的高度和宽度请求。

另请注意,默认情况下,Frame 的内边距为 20。

这是 xaml 的示例代码:

    <Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="6*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="13*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>

<Button Grid.Row="0" Grid.Column="1"/>
<Button Grid.Row="1" Grid.Column="1"/>
<Button Grid.Row="2" Grid.Column="1"/>

<StackLayout x:Name="frmContainer" Grid.Row="0" Grid.Column="3" Grid.RowSpan="3" BackgroundColor="Orange">
<Frame x:Name="frm" OutlineColor="Silver" VerticalOptions="Center" HorizontalOptions="Center" Padding="0" BackgroundColor="Green"/>
</StackLayout>
</Grid>

这是隐藏代码中的构造函数:

    InitializeComponent();

frmContainer.SizeChanged += (s, e) =>
{
frm.HeightRequest = frmContainer.Width;

if (frmContainer.Width > frmContainer.Height)
{
frm.WidthRequest = frmContainer.Height;
}
else
{
frm.WidthRequest = frmContainer.Width;
}
};

关于xaml - 强制 View 为正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36996294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com