C# WINDOWS MAUI專案 製作 BadgeButton(提醒按鈕)

C# WINDOWS MAUI專案 製作 BadgeButton(提醒按鈕)

C# WINDOWS MAUI專案 製作 BadgeButton(提醒按鈕)


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


元件設計思路:

    01.利用 GridLayout 建立一個單一儲存格的限制
    02.Image載入底圖
    03.疊加上BoxView繪製出來的圓形
    04.疊加上Label的提醒文字


BadgeButton.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MAUI_WinAPI_Object_test.CustomControls.BadgeButton" SizeChanged="ContentView_SizeChanged">
    <Border x:Name="Frame"
        Stroke="White" StrokeThickness="1" BackgroundColor="Green"
        MinimumWidthRequest="40" MinimumHeightRequest="45"
        HorizontalOptions="Fill" VerticalOptions="Fill">
        <Border.StrokeShape>
            <RoundRectangle CornerRadius="5,5,5,5" />
        </Border.StrokeShape>
        <Grid x:Name="FullGrid" RowDefinitions="*" ColumnDefinitions="*" Padding="0,2,2,0" >
            <Image x:Name="BaseImage" Grid.Row="0" Grid.Column="0" BackgroundColor="Transparent"
                   HorizontalOptions="Center" VerticalOptions="Center"/>
            <BoxView x:Name="CircleBoxView" HorizontalOptions="End" VerticalOptions="Start"
                   Color="Red"  BackgroundColor="Transparent" WidthRequest="26" HeightRequest="26" CornerRadius="13"/>
            <Label x:Name="BadgeLabel" Grid.Row="0" Grid.Column="0" 
                   Text="99" FontSize="Micro" TextColor="White" BackgroundColor="Transparent"         
                   HorizontalOptions="End" VerticalOptions="Start" Margin="0,3,5,0"/>
        </Grid>
    </Border>
</ContentView>

BadgeButton.xaml.cs

using Microsoft.Maui.Controls;

namespace MAUI_WinAPI_Object_test.CustomControls;

public partial class BadgeButton : ContentView
{
	public BadgeButton()
    {
		InitializeComponent();
        BaseImage.Source = ImageSource.FromFile("dotnet_bot.png");
    }

    private void ContentView_SizeChanged(object sender, EventArgs e)
    {
        double widthRequest = WidthRequest;
        if(widthRequest > 150) 
        {
            CircleBoxView.WidthRequest = 40;
            CircleBoxView.HeightRequest = 40;
            CircleBoxView.CornerRadius = 20;
            BadgeLabel.Margin=new Thickness(0, 10, 13, 0);
        }
    }
}

發表迴響

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