我,我正在探索.NET MAUI,并试图采样一些东西,我遇到的一件事是,我如何计算集合视图网格列数,以适应可用空间。
我设法让它以某种方式工作,但只发现如何获得de设备屏幕宽度,但我的主要目标是在桌面上使用应用程序太,并在桌面上并不总是要在全屏使用,所以计算不工作得很好.
到目前为止,我得到了这个,使用绑定到视图模型上的计算,使用设备屏幕宽度,到GridItemsLayout Span:
XAML:
<StackLayout>
<CollectionView ItemsSource="{Binding MenuItems}"
x:Name="clvMenuItems">
<CollectionView.ItemsLayout>
<GridItemsLayout
Orientation="Vertical"
Span="{Binding NumHorizontalViewMenuItems}"
VerticalItemSpacing="4"
HorizontalItemSpacing="4" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid RowDefinitions="Auto, *" BackgroundColor="Orange">
<ImageButton Grid.Row="0"
HorizontalOptions="Start"
AbsoluteLayout.LayoutBounds="25,12,39,39"
Margin="16,16,0,8"
MaximumHeightRequest="50"
Source="{Binding Icon}"/>
<Label VerticalOptions="Start"
HorizontalOptions="End"
IsVisible="{Binding ShowBadge}"
WidthRequest="38"
Margin="16"
FontAttributes="Bold"
FontSize="16"
Text="NEW"
TextColor="{DynamicResource BadgeThemeColor}"/>
<Label Grid.Row="1"
VerticalTextAlignment="End"
Margin="16,0,10,16"
HorizontalTextAlignment="Start"
Text="{Binding Name}"
FontSize="16"
FontFamily="Roboto"
MaxLines="2"
LineHeight="1"
LineBreakMode="WordWrap"
TextColor="{DynamicResource TextThemeColor}"
BackgroundColor="Transparent" />
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
视图模型:
public int NumHorizontalViewMenuItems => CalcHorizontalViewMenuItems();
static int MenuItemMaxWidth = 120;
private int CalcHorizontalViewMenuItems()
{
return (int)Math.Floor(DeviceDisplay.Current.MainDisplayInfo.Width / MenuItemMaxWidth);
}
任何帮助将不胜感激!谢谢
1条答案
按热度按时间xv8emn3q1#
有@ewerspej建议,我使用了FlexLayout和BindableLayout而不是CollectionView,因为它的设计更符合我想要达到的目标,某种风格的菜单,更适合大屏幕或小屏幕。
我在这里留下我所做的一个样本:
谢谢你的帮助。