Joe*_*jr2 5 user-interface xaml xamarin.forms
我正在尝试使用 XAML 为 Xamarin Forms 创建一个 UI,其中我在网格中有一个框架(尽管我认为对于任何类型的视图答案都是相同的)。我希望框架在它占据的网格单元中使用可用的全宽,但我想强制它的形状为方形。所以,我希望宽度自动调整大小,并将高度设置为与其实际宽度相匹配。
这是我到目前为止所拥有的:
<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>
Run Code Online (Sandbox Code Playgroud)
目前,框架正确地填充了可用宽度,但高度与其左侧的 3 个按钮的总高度大致相同。
我在想我可能需要将框架的 HeightRequest 绑定到它的实际宽度,但我不知道这是否可能,或者如果可以的话怎么做。如果没有,还有其他选择吗?
由于您将框架的 RowSpan 设置为 3,即使您显式地将框架的 HeightRequest 设置为某个较小的值,框架仍将占据整个网格的高度。所以首先你必须防止这种情况发生。您可以通过将框架包含在其他视图中来做到这一点。
现在,为了使框架的高度和宽度与缩放时相同,您可以使用容器的 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>
Run Code Online (Sandbox Code Playgroud)
这是隐藏代码中的构造函数:
InitializeComponent();
frmContainer.SizeChanged += (s, e) =>
{
frm.HeightRequest = frmContainer.Width;
if (frmContainer.Width > frmContainer.Height)
{
frm.WidthRequest = frmContainer.Height;
}
else
{
frm.WidthRequest = frmContainer.Width;
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1491 次 |
| 最近记录: |