C# WINDOWS MAUI專案 抓取螢幕解析度 & 指定Popup顯示位置[置中/左側(0,0)]

C# WINDOWS MAUI專案 抓取螢幕解析度 & 指定Popup顯示位置[置中/左側(0,0)]

C# WINDOWS MAUI專案 抓取螢幕解析度 & 指定Popup顯示位置[置中/左側(0,0)]


GITHUB: https://github.com/jash-git/MAUI_WinAPI_Object_test/tree/main/Code/16


MainPage.xaml code

<?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:local="clr-namespace:MAUI_WinAPI_Object_test.CustomControls"
             xmlns:drawable="clr-namespace:MAUI_WinAPI_Object_test"
             x:Class="MAUI_WinAPI_Object_test.MainPage"
             Title="">
    
    <ContentPage.Resources>
        <drawable:GraphicsDrawable x:Key="drawable01" />
    </ContentPage.Resources>
    
    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">

            <GraphicsView Drawable="{StaticResource drawable01}"
                      HeightRequest="40"
                      WidthRequest="30" />

            <local:CustmImageButton 
                HorizontalOptions="Center"/>
            
            <Image
                Source="dotnet_bot.png"
                SemanticProperties.Description="Cute dot net bot waving hi to you!"
                HeightRequest="200"
                />

            <Label
                x:Name="labtime"
                SemanticProperties.HeadingLevel="Level1"
                FontSize="32"
                HorizontalOptions="Center" />

            <Label
                x:Name="labDisplayInfo"
                Text="Welcome to .NET Multi-platform App UI"
                SemanticProperties.HeadingLevel="Level2"
                SemanticProperties.Description="Welcome to dot net Multi platform App U I"
                FontSize="18"
                HorizontalOptions="Center" />

            <Button
                x:Name="CounterBtn"
                Text="Click me"
                SemanticProperties.Hint="Counts the number of times you click"
                Clicked="OnCounterClicked"
                HorizontalOptions="Center" />

            <local:CustomButton
                x:Name="PopupBtn"
                Text="Show Popup"
                CustomProperty="這是自訂屬性的值"
                Clicked="PopupBtn_Clicked"
                HorizontalOptions="Center" />
            <local:CardControl 
             Title="Hello CardControl"/>
            
            <Button
                x:Name="CloseBtn"
                Text="Close"
                Clicked="CloseBtn_Clicked"
                HorizontalOptions="Center" />

        </VerticalStackLayout>
    </ScrollView>

</ContentPage>


MainPage.xaml.cs code [抓取解析度]

using CommunityToolkit.Maui.Views;
using System.Threading;
using MAUI_WinAPI_Object_test.Views;
using MAUI_WinAPI_Object_test.CustomControls;

namespace MAUI_WinAPI_Object_test
{
    public partial class MainPage : ContentPage
    {
        public int count = 0;
        public IDispatcherTimer timmer { get; set; }
        public Thread thread;
        public bool blnStop = false;
        public MainPage()
        {
            InitializeComponent();
            //*
            //---
            //Timer Mode
            //https://learn.microsoft.com/en-us/answers/questions/1207012/how-to-stop-device-starttimer
            timmer = Application.Current.Dispatcher.CreateTimer();
            timmer.Interval = new TimeSpan(0, 0, 0, 0, 100);//天/時/分/秒/毫秒
            timmer.Tick += Timmer_Tick;
            timmer.IsRepeating = true;//the timer will keep recurring, you can set false
            timmer.Start();
            //---Timer Mode
            //*/
            // 在新執行緒中執行工作

            /*
            thread = new Thread(ThreadFun);
            thread.Start();
            */
        }
        private void Timmer_Tick(object sender, EventArgs e)
        {
            //---
            //抓螢幕解析度
            var displayInfo = DeviceDisplay.MainDisplayInfo;
            double width = displayInfo.Width;
            double height = displayInfo.Height;
            double density = displayInfo.Density;
            //---抓螢幕解析度
            labDisplayInfo.Text = $"{width} x {height} ; {density}";

            labtime.Text = DateTime.Now.ToString("HH:mm:ss");
        }

        [Obsolete]
        private void ThreadFun()
        {
            do
            {
                // 更新使用者介面 (UI) 元素
                Device.BeginInvokeOnMainThread(() =>
                {
                    // 在這裡更新 UI 控制項
                    labtime.Text = DateTime.Now.ToString("HH:mm:ss");
                });

                Thread.Sleep(1000);
            } while (!blnStop);

        }
        private void OnCounterClicked(object sender, EventArgs e)
        {
            count++;

            if (count == 1)
                CounterBtn.Text = $"Clicked {count} time";
            else
                CounterBtn.Text = $"Clicked {count} times";

            SemanticScreenReader.Announce(CounterBtn.Text);
        }

        private void CloseBtn_Clicked(object sender, EventArgs e)
        {
            if (timmer != null)
            {
                timmer.Stop();
            }

            if (thread != null)
            {
                blnStop = true;
                thread = null;
            }
            // Close the active window
            //https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/windows
            Application.Current.CloseWindow(GetParentWindow());
        }

        private async void PopupBtn_Clicked(object sender, EventArgs e)
        {
            //await DisplayAlert("Alert", $"路徑:{AppDomain.CurrentDomain.BaseDirectory}", "OK");//await
            
            labtime.IsVisible = !labtime.IsVisible;//元件隱藏/顯示

            await this.ShowPopupAsync(new PopupPage1());//this.ShowPopup(new PopupPage1());
            await this.ShowPopupAsync(new GridPage());

            await DisplayAlert("Alert", $"{PopupBtn.CustomProperty};{PopupPage1.m_StrResult}", "OK");//await

        }
    }
}


GridPage.xaml code [Start,Start -> 左側(0,0)顯示]

<?xml version="1.0" encoding="utf-8" ?>
<mct:Popup  xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:mct="clr-namespace:CommunityToolkit.Maui.Views;assembly=CommunityToolkit.Maui"
             x:Class="MAUI_WinAPI_Object_test.Views.GridPage"
             HorizontalOptions="Start"
             VerticalOptions="Start"
             CanBeDismissedByTappingOutsideOfPopup="True">
    <Grid x:Name="FullGrid" Margin="3"
          VerticalOptions="Fill"
          HorizontalOptions="Fill" />
</mct:Popup>


GridPage.xaml.cs code

using CommunityToolkit.Maui.Views;
using Jint.Parser;

namespace MAUI_WinAPI_Object_test.Views;

public partial class GridPage : Popup //: ContentPage
{
	public GridPage()
	{
		InitializeComponent();
        // 創建一個 Grid 佈局
        var grid = FullGrid;
        grid.BackgroundColor = Colors.AliceBlue;
        // 定義列和行
        grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
        grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
        grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
        grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });

        // 在網格中添加控制項
        var label1 = new Label { Text = "第一行,第一列" };
        var label2 = new Label { Text = "第二行,第一列" };
        var label3 = new Label { Text = "第一行,第二列" };
        var label4 = new Label { Text = "第二行,第二列" };




        grid.Add(label1, 0, 0);
        grid.Add(label2, 1, 0);
        grid.Add(label3, 0, 1);
        grid.Add(label4, 1, 1);
    }
}


PopupPage1.xaml code [Center,Center -> 置中顯示]

<?xml version="1.0" encoding="utf-8" ?>
<mct:Popup xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:mct="clr-namespace:CommunityToolkit.Maui.Views;assembly=CommunityToolkit.Maui"
             x:Class="MAUI_WinAPI_Object_test.Views.PopupPage1"
             CanBeDismissedByTappingOutsideOfPopup="False">
    <VerticalStackLayout  BackgroundColor="Blue">
        <Label 
            Text="Welcome to .NET MAUI!"
            VerticalOptions="Center" 
            HorizontalOptions="Center" />
        <Button 
                x:Name="CloseBtn"
                Text="Close App" 
                Clicked="CloseBtn_Clicked"
                HorizontalOptions="Center" ClassId="" />
    </VerticalStackLayout>
</mct:Popup>


PopupPage1.xaml.cs code

using CommunityToolkit.Maui.Views;

namespace MAUI_WinAPI_Object_test.Views;

public partial class PopupPage1 : Popup//: ContentPage
{
    public static String m_StrResult;
	public PopupPage1()
	{
		InitializeComponent();
        m_StrResult = "";
        //Size = new Size(500, 500);//³]©wUI¤j¤p
    }

    private void CloseBtn_Clicked(object sender, EventArgs e)
    {
        m_StrResult = "CloseBtn_Clicked";
        Close();
    }
}

發表迴響

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