Xaml 强制视图为方形
我正在尝试用XAML为Xamarin表单创建一个UI,其中我在网格中有一个框架(尽管我假设对于任何类型的视图,答案都是相同的)。我希望框架在它所占据的网格单元中使用其可用的全宽度,但我希望强制它为方形。因此,我希望宽度自动调整大小,并将高度设置为与其实际宽度匹配 以下是我目前掌握的情况:Xaml 强制视图为方形,xaml,user-interface,xamarin.forms,Xaml,User Interface,Xamarin.forms,我正在尝试用XAML为Xamarin表单创建一个UI,其中我在网格中有一个框架(尽管我假设对于任何类型的视图,答案都是相同的)。我希望框架在它所占据的网格单元中使用其可用的全宽度,但我希望强制它为方形。因此,我希望宽度自动调整大小,并将高度设置为与其实际宽度匹配 以下是我目前掌握的情况: <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefin
<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个按钮的总高度大致相同
我在想,我可能需要将框架的高度请求绑定到其实际宽度,但我不知道这是否可行,或者如果可行的话如何实现。如果没有,还有其他选项吗?因为要将帧的行跨度设置为3,即使将帧的HeightRequest显式设置为某个较小的值,帧仍将占据整个网格的高度。所以首先你必须防止这种情况发生。可以通过将框架包含在其他视图中来实现这一点 现在,要使框架的高度和宽度与缩放时相同,可以使用容器的SizeChanged事件并相应地设置框架的高度和宽度请求 还请注意,默认情况下,“帧”的填充为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>
你不应该在else中设置HeightRequest吗?我刚刚遇到了一个本来应该保存图像的框架的问题。最后,仅仅使图像看起来像我用一帧制作的部分要容易得多,因为图像的纵横比比比保持一帧正方形要容易得多。
InitializeComponent();
frmContainer.SizeChanged += (s, e) =>
{
frm.HeightRequest = frmContainer.Width;
if (frmContainer.Width > frmContainer.Height)
{
frm.WidthRequest = frmContainer.Height;
}
else
{
frm.WidthRequest = frmContainer.Width;
}
};