差分

ナビゲーションに移動 検索に移動

MAUIのXAMLでボタンの中身をViewにしたい

2,007 バイト追加, 2024年4月3日 (水)
ページの作成:「 MAUIのButtonの中身をXAMLの図形機能でベクター画像として描画しようと思ったがMAUIのButtonの中に別Viewは配置できないらしい。 M…」


MAUIのButtonの中身をXAMLの図形機能でベクター画像として描画しようと思ったがMAUIのButtonの中に別Viewは配置できないらしい。
MAUIのButtonクラスはViewの派生クラスでありダイレクトコンテンツをサポートしていないらしい。
Buttonクラスは文字を表示するしかできない。
まじでゴミ。

Gridなどで代用しようと試みたがGridにはClickedなどのイベントも見当たらない。
まじでゴミ。

== 解決策:ContentView派生クラスのボタンを作る ==
ViewではなくContentViewを基底クラスとするボタンを作る。
<source lang="csharp">
using System;
using Microsoft.Maui.Controls;

public class ContentButton : ContentView
{
public event EventHandler? Clicked;

public ContentButton()
{
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) => Clicked?.Invoke(this, e);
GestureRecognizers.Add(tapGestureRecognizer);
}
}
</source>

こんな感じで使う。
<source lang="xml">
<?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="using:Capture8"
x:Class="Capture8.MainPage">
<StackLayout>

<!-- カメラの撮影ボタンのようなもの -->
<local:ContentButton
BackgroundColor="CornflowerBlue"
WidthRequest="80"
HeightRequest="80"
HorizontalOptions="CenterAndExpand"
VerticalOptions="CenterAndExpand"
Clicked="OnCaptureButtonClicked" >
<Grid>
<Ellipse WidthRequest="70" HeightRequest="70" Fill="Red" />
<Ellipse WidthRequest="60" HeightRequest="60" Fill="White" />
</Grid>
</local:ContentButton>

</StackLayout>
</ContentPage>
</source>

[[category: MAUI]]

案内メニュー