Mobile 如何使用正方形创建响应网格?
我现在正在创建一个网格,里面充满了按钮。现在我希望这个网格是响应性的,按钮是方形的。我想要创建的东西看起来像iOS或Android主屏幕(只是按钮)Mobile 如何使用正方形创建响应网格?,mobile,grid,xamarin,xamarin.forms,Mobile,Grid,Xamarin,Xamarin.forms,我现在正在创建一个网格,里面充满了按钮。现在我希望这个网格是响应性的,按钮是方形的。我想要创建的东西看起来像iOS或Android主屏幕(只是按钮) Grid Grid=新网格 { HorizontalOptions=LayoutOptions.StartAndExpand, 行间距=15, 柱间距=15, 列定义= { new ColumnDefinition{Width=new GridLength(1,GridUnitType.Star)}, new ColumnDefinition{Wi
Grid Grid=新网格
{
HorizontalOptions=LayoutOptions.StartAndExpand,
行间距=15,
柱间距=15,
列定义=
{
new ColumnDefinition{Width=new GridLength(1,GridUnitType.Star)},
new ColumnDefinition{Width=new GridLength(1,GridUnitType.Star)},
new ColumnDefinition{Width=new GridLength(1,GridUnitType.Star)}
}
};
对于(int i=0;i<12;i++)
{
MonitorButton=新建MonitorButton();
grid.Children.Add(按钮,i%3,i/3);
}
this.Content=新的滚动视图
{
衬垫=新厚度(15),
方向=滚动方向。垂直,
内容=网格
};
在这里,我创建了一个包含3列的网格,其中填充了12个监视器按钮(背景上有图像的按钮)。看起来不错。。现在,当我以横向模式打开屏幕时,屏幕上充满了矩形,因为列的数量仍然相同。。。
我怎样才能解决这个问题?我希望有某种动态可能性(例如:itemscontrol@XAML)。当您旋转屏幕时,当前页面会自动调整大小,因此它会在页面中调用OnSizeRequest方法。如果重写该方法,则可以同时检测大小和方向 YourPage.cs | | YourPage.xaml.cs
protected override SizeRequest OnSizeRequest(double widthConstraint, double heightConstraint)
{
if(widthConstraint>heightConstraint)
{
//landscape mode
//set your grid row & columndefinitions
}
else
{
//portait mode
//set your grid row & columndefinitions
}
return base.OnSizeRequest(widthConstraint, heightConstraint);
}
我认为这个定制的(自定义网格控件)网格会更好地使用,它有命令,所以你可以识别哪个项目被点击,因此我认为你可能不需要在你的UI上也有这么多的按钮。
您可以在网格单元中添加任何想要的控件(在正方形中,就像添加了按钮一样)
Xaml
<?xml version="1.0" encoding="utf-8" ?>
<Grid xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Test.Controls.GridView">
</Grid>
然后在任何你想要的地方使用这个控件。i、 e.在任何内容页上。这将是您的实际视图(仪表板)
子载波.Xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:control="clr-namespace:Test.Controls"
x:Class="Test.Views.SubCarriers" Title="Details Dashboard">
<ContentPage.Content>
<ScrollView Margin="5">
<control:GridView HorizontalOptions="FillAndExpand"
Grid.Row="1"
VerticalOptions="FillAndExpand"
RowSpacing="5"
ColumnSpacing="5"
MaxColumns="2"
ItemsSource="{Binding SubCarriersCnt}"
CommandParameter="{Binding SubCarriersCnt}"
Command="{Binding ClickCommand}"
IsClippedToBounds="False">
<control:GridView.TileHeight>
<OnPlatform x:TypeArguments="x:Single"
iOS="60"
Android="90"
WinPhone="90" />
</control:GridView.TileHeight>
</control:GridView>
</ScrollView>
</ContentPage.Content>
</ContentPage>
Xamarin.Forms中当前没有GridView。您必须计算列宽(和间距)并动态添加列定义。这将使用
%
来完成。嗨,我已经实现了所有功能,除了ClickCommand之外,其他功能都可以正常工作。我尝试了几种方法,但无法获得单击操作。如果可以,请共享代码。
<?xml version="1.0" encoding="utf-8" ?>
<Grid xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Test.Views.SubControlsView" BackgroundColor="CornflowerBlue">
<StackLayout VerticalOptions="CenterAndExpand">
<!--You can add any controls which you want-->
<!--<Label Text="{Binding id}" HorizontalOptions="CenterAndExpand" TextColor="White" />-->
</StackLayout>
</Grid>
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Test.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SubControlsView : Grid
{
public SubControlsView()
{
InitializeComponent();
}
public SubControlsView(object item)
{
InitializeComponent();
BindingContext = item;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:control="clr-namespace:Test.Controls"
x:Class="Test.Views.SubCarriers" Title="Details Dashboard">
<ContentPage.Content>
<ScrollView Margin="5">
<control:GridView HorizontalOptions="FillAndExpand"
Grid.Row="1"
VerticalOptions="FillAndExpand"
RowSpacing="5"
ColumnSpacing="5"
MaxColumns="2"
ItemsSource="{Binding SubCarriersCnt}"
CommandParameter="{Binding SubCarriersCnt}"
Command="{Binding ClickCommand}"
IsClippedToBounds="False">
<control:GridView.TileHeight>
<OnPlatform x:TypeArguments="x:Single"
iOS="60"
Android="90"
WinPhone="90" />
</control:GridView.TileHeight>
</control:GridView>
</ScrollView>
</ContentPage.Content>
</ContentPage>
using System;
using Test.ViewModels;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using CommonUtility;
namespace Test.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SubCarriers : ContentPage
{
private YourViewModel viewModel;
public SubCarriers()
{
InitializeComponent();
this.BindingContext = new SubCarriersViewModel();
viewModel = (YourViewModel)this.BindingContext;
}
}
}