C# Maui VerticalStackLayout scroll 範例

C# Maui VerticalStackLayout scroll 範例

C# Maui VerticalStackLayout scroll 範例


資料來源: ChatGPT3.5/Bard/Copilot


ChatGPT3.5

using Microsoft.Maui.Controls;

namespace YourNamespace
{
    public class YourPage : ContentPage
    {
        public YourPage()
        {
            var stackLayout = new StackLayout();
            // 在這裡添加垂直排列的元件至 stackLayout

            var scrollView = new ScrollView
            {
                Content = stackLayout,
                Orientation = ScrollOrientation.Vertical // 設置為垂直捲動
            };

            Content = scrollView;
        }
    }
}


Bard

<!-- 方案01.將 VerticalStackLayout 作為 ScrollView 的子元素 -->
<ScrollView>
  <VerticalStackLayout>
    <Label Text="項目 1" />
    <Label Text="項目 2" />
    <Label Text="項目 3" />
    </VerticalStackLayout>
</ScrollView>

<!-- 方案02.使用 CollectionView: -->
<CollectionView ItemsSource="{Binding Items}">
  <CollectionView.ItemTemplate>
    <DataTemplate>
      <VerticalStackLayout>
        <Label Text="{Binding Name}" />
        <Image Source="{Binding ImageUrl}" />
      </VerticalStackLayout>
    </DataTemplate>
  </CollectionView.ItemTemplate>
</CollectionView>


Copilot

using Microsoft.Maui;
using Microsoft.Maui.Controls;
using Microsoft.Maui.Controls.Xaml;
using System.Linq;

namespace MauiApp1
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            BindingContext = new MonkeysViewModel();
        }

        private void Button_Clicked(object sender, EventArgs e)
        {
            MonkeysViewModel viewModel = BindingContext as MonkeysViewModel;
            Monkey monkey = viewModel.Monkeys.FirstOrDefault(m => m.Name == "Proboscis Monkey");
            collectionView.ScrollTo(monkey, position: ScrollToPosition.Center, animate: true);
        }
    }
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="MauiApp1.MainPage"
             BackgroundColor="{DynamicResource PageBackgroundColor}">

    <StackLayout>
        <Button Text="Scroll to Proboscis Monkey" Clicked="Button_Clicked" />
        <CollectionView x:Name="collectionView" ItemsSource="{Binding Monkeys}" SelectionMode="None">
            <CollectionView.ItemsLayout>
                <VerticalStackLayout Spacing="10" Margin="10" />
            </CollectionView.ItemsLayout>
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Grid Padding="10">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Image Grid.Column="0" Source="{Binding ImageUrl}" Aspect="AspectFill" HeightRequest="60" WidthRequest="60" />
                        <StackLayout Grid.Column="1" Spacing="0" Margin="10,0,0,0" VerticalOptions="Center">
                            <Label Text="{Binding Name}" FontAttributes="Bold" />
                            <Label Text="{Binding Location}" FontAttributes="Italic" />
                            <Label Text="{Binding Details}" />
                        </StackLayout>
                    </Grid>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </StackLayout>

</ContentPage>


自己實作範例

<?xml version="1.0" encoding="utf-8" ?>
<!--套餐-->
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="VPOS.Views.FoodMeal"
             Background="Transparent" Title="">
    <Border x:Name="FullBorder" Stroke="White" StrokeThickness="1" Background="#194a6e">
        <Border.StrokeShape>
            <RoundRectangle CornerRadius="5" />
        </Border.StrokeShape>
        <Grid x:Name="FullGrid" RowDefinitions="0.8*,10.2*,1*" ColumnDefinitions="*" >
            <Border x:Name="HeadBorder" Stroke="Blue" StrokeThickness="1" Background="Transparent" Margin="0" Padding="0" Grid.Row="0" Grid.Column="0">
                <Border.StrokeShape>
                    <RoundRectangle CornerRadius="5" />
                </Border.StrokeShape>
                <Grid x:Name="HeadGrid" RowDefinitions="*" ColumnDefinitions="19*,1*">
                    <Label x:Name="TitleLable"
                        Text="套餐編輯" TextColor="White" FontSize="Large" Grid.Row="0" Grid.Column="0"
                        FontAutoScalingEnabled="True" VerticalOptions="Center" HorizontalOptions="Center" />
                    <Button x:Name="CloseBtn" FontSize="Large" BackgroundColor="Transparent" Clicked="CloseBtn_Clicked"  Text="X" Grid.Row="0" Grid.Column="1"/>
                </Grid>
            </Border>

            <Grid x:Name="BodyGrid" Grid.Row="1" RowDefinitions="*" ColumnDefinitions="10*,10*" Margin="0,5,0,0">
                <Grid x:Name="LeftBodyGrid" Grid.Column="0" RowDefinitions="2.6*,7.4*" RowSpacing="10" ColumnSpacing="2" ColumnDefinitions="*" Margin="10,0,5,0" Padding="0">
                    <BoxView Color="Blue" Grid.Row="0" />
                    <ScrollView  Grid.Row="1">
                        <VerticalStackLayout BackgroundColor="Red" Padding="10,5,10,5" Spacing="10">
                            <VerticalStackLayout BackgroundColor="Green" Grid.Row="1" Padding="5,5,5,5" Spacing="10" MinimumHeightRequest="110">
                            </VerticalStackLayout>
                            <VerticalStackLayout BackgroundColor="Green" Grid.Row="1" Padding="5,5,5,5" Spacing="10" MinimumHeightRequest="110">
                            </VerticalStackLayout>
                            <VerticalStackLayout BackgroundColor="Green" Grid.Row="1" Padding="5,5,5,5" Spacing="10" MinimumHeightRequest="110">
                            </VerticalStackLayout>
                            <VerticalStackLayout BackgroundColor="Green" Grid.Row="1" Padding="5,5,5,5" Spacing="10" MinimumHeightRequest="110">
                            </VerticalStackLayout>
                            <VerticalStackLayout BackgroundColor="Green" Grid.Row="1" Padding="5,5,5,5" Spacing="10" MinimumHeightRequest="110">
                            </VerticalStackLayout>
                        </VerticalStackLayout>
                    </ScrollView>

                </Grid>

                <Grid x:Name="RightBodyGrid" Grid.Column="1" RowSpacing="2" ColumnSpacing="2" RowDefinitions="2*,6*,2*" Margin="5,0,10,0">
                    <BoxView Color="Red" Grid.Row="0" />
                    <BoxView Color="Green" Grid.Row="1" />
                    <BoxView Color="Blue" Grid.Row="2" />
                </Grid>
            </Grid>

            <Grid x:Name="FootGrid" Grid.Row="2" RowDefinitions="*" ColumnDefinitions="6.7*,3*,0.6*,3*,6.7*" Margin="0,5">
                <Button x:Name="SaveBtn" TextColor="White" BackgroundColor="#cc6600" FontSize="Subtitle" VerticalOptions="Fill" HorizontalOptions="Fill" Text="確定" Clicked="SaveBtn_Clicked" Grid.Column="1"/>
                <Button x:Name="ExitBtn" TextColor="White" BackgroundColor="#cc6600" FontSize="Subtitle" VerticalOptions="Fill" HorizontalOptions="Fill" Text="取消" Clicked="CloseBtn_Clicked" Grid.Column="3"/>
            </Grid>
        </Grid>
    </Border>
</ContentPage>

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *