C# MAUI GridLayout 使用程式隱藏/顯示行列元素 & UI自動補齊[ 移除/插入 GridLayout內的行列配置(RowDefinitions/ColumnDefinitions)和對應的內部元件 ]

C# MAUI GridLayout 使用程式隱藏/顯示行列元素 & UI自動補齊[ 移除/插入 GridLayout內的行列配置(RowDefinitions/ColumnDefinitions)和對應的內部元件 ]

C# MAUI GridLayout 使用程式隱藏/顯示行列元素 & UI自動補齊[ 移除/插入 GridLayout內的行列配置(RowDefinitions/ColumnDefinitions)和對應的內部元件 ]


資料來源: 公司專案


VTSTORE.xaml

<?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.VTSTORE"
             xmlns:local="clr-namespace:VPOS.CustomControls"
             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.6*,1.1*,10.3*" ColumnDefinitions="*" RowSpacing="0">
            <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="Medium" Grid.Row="0" Grid.Column="0"
                        FontAutoScalingEnabled="True" VerticalOptions="Center" HorizontalOptions="Center" />
                    <Button x:Name="CloseBtn" FontSize="Medium" BackgroundColor="Transparent" Clicked="CloseBtn_Clicked"  Text="X" Grid.Row="0" Grid.Column="1"/>
                </Grid>
            </Border>
            <Border x:Name="TopBorder" Stroke="Blue" StrokeThickness="1" Background="Transparent" Margin="0" Padding="0" Grid.Row="1" Grid.Column="0">
                <Grid x:Name="TopGrid" ColumnDefinitions="*,*,*,*,*,*,*" ColumnSpacing="20" Padding="20,5,0,5">
                    <Button x:Name="TopBtn00" Text="掃描訂單" BorderColor="White" TextColor="White" BackgroundColor="#2470a0" Grid.Column="0" Clicked="TopBtn00_Clicked"/>
                    <Button x:Name="TopBtn01" Text="等待處理(現場單)" BorderColor="White" TextColor="White" BackgroundColor="#2470a0" Grid.Column="1" Clicked="TopBtn01_Clicked"/>
                    <Button x:Name="TopBtn02" Text="等待處理(預購單)" BorderColor="White" TextColor="White" BackgroundColor="#2470a0" Grid.Column="2" Clicked="TopBtn02_Clicked"/>
                    <Button x:Name="TopBtn03" Text="製作中" BorderColor="White" TextColor="White" BackgroundColor="#2470a0" Grid.Column="3" Clicked="TopBtn03_Clicked"/>
                    <Button x:Name="TopBtn04" Text="進階查詢" BorderColor="White" TextColor="White" BackgroundColor="#2470a0" Grid.Column="4" Clicked="TopBtn04_Clicked"/>
                    <Button x:Name="TopBtn05" Text="離開" BorderColor="White" TextColor="White" BackgroundColor="#2470a0" Grid.Column="5" Clicked="CloseBtn_Clicked"/>
                    <ImageButton x:Name="KeyboardBtn" Source="keyboard.png" BackgroundColor="Transparent" Grid.Column="6" WidthRequest="60" HeightRequest="60" HorizontalOptions="Center" VerticalOptions="Center" Clicked="KeyboardBtn_Clicked"/>
                </Grid>
            </Border>
            <Grid x:Name="BodyGrid" Grid.Row="2" RowDefinitions="*" ColumnDefinitions="18*,2*" Margin="0,0,0,0">
                <Grid x:Name="LeftGrid" RowDefinitions="1.3*,9*" ColumnDefinitions="*" Background="Transparent" Margin="0" Padding="0" Grid.Row="0" Grid.Column="0">
                    <Grid x:Name="LeftTopGrid" RowDefinitions="*" ColumnDefinitions="0.9*,0.9*,1.8*,0.4*" Margin="0" Padding="15,15,10,5" Grid.Row="0" Grid.Column="0" ColumnSpacing="15">
                        <Border Stroke="White" StrokeThickness="1" Background="Transparent" Margin="0" Padding="10" Grid.Column="0">
                            <Entry x:Name="OrderNoEntry" FontSize="Subtitle" TextColor="Black" BackgroundColor="White" Placeholder="輸入訂單號碼" />
                        </Border>
                        <Label Text="點點食訂單編號" TextColor="White" BackgroundColor="#194a6e" VerticalOptions="Start" HorizontalOptions="Start" Padding="0" Margin="15,-10,0,0" Grid.Column="0"/>

                        <Border Stroke="White" StrokeThickness="1" Background="Transparent" Margin="0" Padding="10" Grid.Column="1">
                            <Picker x:Name="StatePicker" FontSize="Subtitle" Title="" BackgroundColor="White" WidthRequest="180"/>
                        </Border>
                        <Label Text="訂單狀態" TextColor="White" BackgroundColor="#194a6e" VerticalOptions="Start" HorizontalOptions="Start" Padding="0" Margin="15,-10,0,0" Grid.Column="1"/>

                        <Border Stroke="White" StrokeThickness="1" Background="Transparent" Margin="0" Padding="0" Grid.Column="2">
                            <Grid RowDefinitions="*" ColumnDefinitions="*,10,*" Margin="0" Padding="10">
                                <DatePicker x:Name="StartDatePicker" FontSize="Subtitle" BackgroundColor="White" WidthRequest="250" Grid.Column="0"/>
                                <Label Text="~" FontSize="Subtitle" TextColor="White" BackgroundColor="#194a6e" Padding="0" VerticalOptions="Center" Grid.Column="1"/>
                                <DatePicker x:Name="EndDatePicker" FontSize="Subtitle" BackgroundColor="White" WidthRequest="250" Grid.Column="2"/>
                            </Grid>
                        </Border>
                        <Label Text="訂單日期" TextColor="White" BackgroundColor="#194a6e" VerticalOptions="Start" HorizontalOptions="Start" Padding="0" Margin="15,-10,0,0" Grid.Column="2"/>
                        
                        <Button x:Name="MiddleBtn" Text="查詢" BorderColor="White" TextColor="White" BackgroundColor="#cc6600" Grid.Column="3" Clicked="MiddleBtn_Clicked"/>
                    </Grid>
                    <ScrollView Margin="15,0,10,10" HorizontalScrollBarVisibility="Always" VerticalScrollBarVisibility="Always" Grid.Row="1">
                        <ListView x:Name="OrderListView"
                                              SelectionMode="Single"
                                              BackgroundColor="White"
                                              IsPullToRefreshEnabled="True" IsRefreshing="True"
                                              VerticalScrollBarVisibility="Never"
                                              ItemSelected="OrderListView_ItemSelected">
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <ViewCell>
                                        <!-- ListView 資料結構標準: ListView.ItemTemplate -> DataTemplate -> ViewCell-->
                                        <Grid BackgroundColor="{Binding BColor}" ColumnDefinitions="200,150,300,200,250,150,150,300" Margin="10">
                                            <VisualStateManager.VisualStateGroups>
                                                <VisualStateGroupList>
                                                    <VisualStateGroup x:Name="CommonStates">
                                                        <VisualState x:Name="Normal"/>
                                                        <VisualState x:Name="PointerOver">
                                                            <VisualState.Setters>
                                                                <Setter Property="BackgroundColor" Value="#8df2f2" />
                                                            </VisualState.Setters>
                                                        </VisualState>
                                                        <VisualState x:Name="Selected">
                                                            <VisualState.Setters>
                                                                <Setter Property="BackgroundColor" Value="Red" />
                                                            </VisualState.Setters>
                                                        </VisualState>
                                                    </VisualStateGroup>
                                                </VisualStateGroupList>
                                            </VisualStateManager.VisualStateGroups>
                                            <Label Text="{Binding No}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="Start" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="0" />
                                            <Label Text="{Binding Type}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="Start" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="1" />
                                            <Label Text="{Binding Information}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="Start" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="2" />
                                            <Label Text="{Binding Name}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="Start" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="3" />
                                            <Label Text="{Binding Time}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="Start" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="4" />
                                            <Label Text="{Binding Price}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="Start" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="5" />
                                            <Label Text="{Binding PayType}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="End" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="6" />
                                            <Label Text="{Binding State}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="End" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="7" />
                                        </Grid>
                                    </ViewCell>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>
                    </ScrollView>
                </Grid>
                <Border x:Name="RightBorder" Stroke="Blue" StrokeThickness="1" Background="Transparent" Margin="0" Padding="0" Grid.Row="0" Grid.Column="1">
                    <VerticalStackLayout x:Name="RightVerticalStackLayout" Spacing="20" Padding="5,20,5,0">
                        <Button x:Name="RightBtn00" HeightRequest="60" Text="訂單資訊" BorderColor="White" TextColor="White" BackgroundColor="#cc6600" Clicked="RightBtn00_Clicked"/>
                        <Button x:Name="RightBtn01" HeightRequest="60" Text="接收訂單" BorderColor="White" TextColor="White" BackgroundColor="#cc6600" Clicked="RightBtn01_Clicked"/>
                        <Button x:Name="RightBtn02" HeightRequest="60" Text="婉拒訂單" BorderColor="White" TextColor="White" BackgroundColor="#cc6600" Clicked="RightBtn02_Clicked"/>
                        <Button x:Name="RightBtn03" HeightRequest="60" Text="補印訂單" BorderColor="White" TextColor="White" BackgroundColor="#cc6600" Clicked="RightBtn03_Clicked"/>
                        <Button x:Name="RightBtn04" HeightRequest="60" Text="移除訂單" BorderColor="White" TextColor="White" BackgroundColor="#cc6600" Clicked="RightBtn04_Clicked"/>
                    </VerticalStackLayout>
                </Border>
            </Grid>
        </Grid>
    </Border>
</ContentPage>


VTSTORE.cs

using System.Collections.ObjectModel;

namespace VPOS.Views;

public class VTSTOREOrderItem
{
    public string id { get; set; }
    public string No { get; set; }//訂單號
    public string Type { get; set; }//點餐方式
    public string Information { get; set; }//訂單資訊
    public string Name { get; set; }//客戶名稱
    public string Time { get; set; }//點餐/預計取餐時間
    public string Price { get; set; }//訂單金額
    public string PayType { get; set; }//付款方式
    public string State { get; set; }//訂單狀態
    public Color Font_Color { get; set; }
    public Color Default_Color { get; set; }
    public double Font_Size { get; set; }
    public Color BColor { get; set; }
}
public partial class VTSTORE : ContentPage
{
    public static bool m_blnRun = false;
    private ObservableCollection<VTSTOREOrderItem> m_VTSTOREOrderItems = new ObservableCollection<VTSTOREOrderItem>();
    public ObservableCollection<PickerModel> PickerList { get; set; } = new ObservableCollection<PickerModel>();
    public PickerModel m_SelectedPicker { get; set; } = new PickerModel();
    public int m_SelectedPickerIndex = -1;


    public VTSTORE()
    {
        InitializeComponent();
        m_blnRun = false;
        OrderListView.ItemsSource = m_VTSTOREOrderItems;//綁定購物車資料結構

        //Picker 變數初始化
        if (MainPage.m_dblScreenWidth==1920)
        {
            StatePicker.WidthRequest = 250;
            StartDatePicker.WidthRequest = 250;
            EndDatePicker.WidthRequest = 250;
        }
        else if (MainPage.m_dblScreenWidth == 1366)
        {
            StatePicker.WidthRequest = 220;
            StartDatePicker.WidthRequest = 220;
            EndDatePicker.WidthRequest = 220;
        }
        else
        {
            StatePicker.WidthRequest = 150;
            StartDatePicker.WidthRequest = 150;
            EndDatePicker.WidthRequest = 150;
        }

        String[] ItemState = new String[6] { "未完成的訂單", "等待接單", "已經接單,處理中", "婉拒訂單", "訂單已完成", "店顛已註銷" };
        for (int i = 0; i < ItemState.Length; i++)
        {
            PickerModel ItemObject = new PickerModel();
            ItemObject.Picker_Name = ItemState[i];
            ItemObject.Picker_Value = i.ToString();
            PickerList.Add(ItemObject);
        }

        StatePicker.ItemsSource = PickerList;
        StatePicker.ItemDisplayBinding = new Binding("Picker_Name");
        StatePicker.SelectedIndex = 0;
        //---Picker 變數初始化

        LeftTopGridHide();//隱藏/移除GridLayout

        //---
        //配合背景透明設定達到調整畫面大小功能
        int intMarginX, intMarginY;
        intMarginX = 50 / 4; //(int)((MainPage.m_dblScreenWidth - 1000) / 4);
        intMarginY = 50 / 4; //(int)((MainPage.m_dblScreenHeight - 700) / 4);
        FullBorder.Margin = new Thickness(intMarginX, intMarginY, intMarginX, intMarginY);
        //---配合背景透明設定達到調整畫面大小功能
    }

    private async void CloseBtn_Clicked(object sender, EventArgs e)
    {
        m_blnRun = false;
        await Navigation.PopModalAsync();
    }

    private void KeyboardBtn_Clicked(object sender, EventArgs e)
    {
        MainPage.ShowSoftKeyboard();//呼叫軟體鍵盤
    }

    private void TopBtn04_Clicked(object sender, EventArgs e)//進階查詢
    {
        LeftTopGridShow();//顯示/插入GridLayout
        SetTopBtnColor(TopBtn04);//TopBtn點擊按鈕顏色切換
    }

    private void TopBtn03_Clicked(object sender, EventArgs e)//製作中
    {
        LeftTopGridHide();//隱藏/移除GridLayout
        SetTopBtnColor(TopBtn03);//TopBtn點擊按鈕顏色切換
    }

    private void TopBtn02_Clicked(object sender, EventArgs e)//等待處理(預購單)
    {
        LeftTopGridHide();//隱藏/移除GridLayout
        SetTopBtnColor(TopBtn02);//TopBtn點擊按鈕顏色切換
    }

    private void TopBtn01_Clicked(object sender, EventArgs e)//等待處理(現場單)
    {
        LeftTopGridHide();//隱藏/移除GridLayout
        SetTopBtnColor(TopBtn01);//TopBtn點擊按鈕顏色切換
    }

    private void TopBtn00_Clicked(object sender, EventArgs e)//掃描訂單
    {
        LeftTopGridHide();//隱藏/移除GridLayout
        SetTopBtnColor(TopBtn00);//TopBtn點擊按鈕顏色切換
    }

    private void RightBtn00_Clicked(object sender, EventArgs e)//訂單資訊
    {

    }

    private void RightBtn01_Clicked(object sender, EventArgs e)//接收訂單
    {

    }

    private void RightBtn02_Clicked(object sender, EventArgs e)//婉拒訂單
    {

    }

    private void RightBtn03_Clicked(object sender, EventArgs e)//補印訂單
    {

    }

    private void RightBtn04_Clicked(object sender, EventArgs e)//移除訂單
    {

    }

    private void MiddleBtn_Clicked(object sender, EventArgs e)//查詢
    {

    }

    private void OrderListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {

    }

    private void SetTopBtnColor(Button BtnBuf)//TopBtn點擊按鈕顏色切換
    {
        Color m_ColorTopBtnNormal = Color.FromHex("#2470a0");
        Color m_ColorTopBtnClicked = Color.FromHex("#cc6600");

        TopBtn00.BackgroundColor = m_ColorTopBtnNormal;
        TopBtn01.BackgroundColor = m_ColorTopBtnNormal;
        TopBtn02.BackgroundColor = m_ColorTopBtnNormal;
        TopBtn03.BackgroundColor = m_ColorTopBtnNormal;
        TopBtn04.BackgroundColor = m_ColorTopBtnNormal;

        BtnBuf.BackgroundColor = m_ColorTopBtnClicked;

    }
    private void LeftTopGridHide()//隱藏/移除GridLayout
    {
        if(LeftTopGrid.IsVisible)
        {
            LeftTopGrid.IsVisible = false;
            LeftGrid.RowDefinitions.RemoveAt(0);
        }
    }
    private void LeftTopGridShow()//顯示/插入GridLayout
    {
        if (!LeftTopGrid.IsVisible)
        {
            LeftTopGrid.IsVisible = true;
            GridLength height = new GridLength(1.3, GridUnitType.Star);
            RowDefinition RowDefinitionBuf = new RowDefinition(height);
            LeftGrid.RowDefinitions.Insert(0, RowDefinitionBuf);
        }
    }
}
 

One thought on “C# MAUI GridLayout 使用程式隱藏/顯示行列元素 & UI自動補齊[ 移除/插入 GridLayout內的行列配置(RowDefinitions/ColumnDefinitions)和對應的內部元件 ]

  1. C# MAUI GridLayout 使用程式隱藏/顯示行列元素 & UI自動補齊[ 移除/插入 GridLayout內的行列配置(RowDefinitions/ColumnDefinitions)和對應的內部元件 ] ~ 非起始列 就要自己把移除列的高度指定到其他列


    private void TabBorderShowHide(int index)
    {
    switch (index)
    {
    case 1:
    TabBtn01.BackgroundColor = Color.FromHex("#14539A");
    TabBtn02.BackgroundColor = Color.FromHex("#0C3561");

    TabBorder01.IsVisible = true;
    TabBorder02.IsVisible = false;

    SetPicker01Value();
    SetPicker02Value();
    SetPicker03Value();
    SetPicker04Value();

    if (!FooterGrid.IsVisible)
    {
    //---
    //指定 BodyGrid 所以 BodyGrid 從11.4* -> 10.4*
    var row = FullGrid.RowDefinitions[1];
    row.Height = new GridLength(10.4, GridUnitType.Star);
    //---指定 BodyGrid 所以 BodyGrid 從11.4* -> 10.4*

    FooterGrid.IsVisible = true;
    GridLength height = new GridLength(1, GridUnitType.Star);
    RowDefinition RowDefinitionBuf = new RowDefinition(height);
    FullGrid.RowDefinitions.Insert(2, RowDefinitionBuf);
    }
    break;
    case 2:
    TabBtn02.BackgroundColor = Color.FromHex("#14539A");
    TabBtn01.BackgroundColor = Color.FromHex("#0C3561");

    TabBorder02.IsVisible = true;
    TabBorder01.IsVisible = false;

    SetPicker05Value();
    SetPicker06Value();
    SetPicker07Value();

    if (FooterGrid.IsVisible)
    {
    FooterGrid.IsVisible = false;
    FullGrid.RowDefinitions.RemoveAt(2);

    //---
    //指定將移除列的高度1*放到 BodyGrid 所以 BodyGrid 從10.4* -> 11.4*
    var row = FullGrid.RowDefinitions[1];
    row.Height = new GridLength(11.4, GridUnitType.Star);
    //---指定將移除列的高度1*放到 BodyGrid 所以 BodyGrid 從10.4* -> 11.4*
    }
    break;
    }
    }

發表迴響

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