我一直在尝试创建不同类型的弹出窗口,以测试一切是如何工作的。我已经通过文档(https://learn.microsoft.com/en-us/dotnet/maui/user-interface/pop-ups),但没有正式的例子,如何创建一个自定义模板的弹出窗口或对话框。
假设我希望在弹出窗口中:
- 标签
- 日期选取器
- 时间选取器
- 文字方块
- 文件选取器
- 等等
和两个答案或输入字段(如Microsoft示例)。
有人可以帮助一个例子,我可以创建相同的外观弹出作为默认的,但与自定义的一组控件,将利用MVVM模型?
对于相同的外观,我指的是以下默认布局:
我试过用这种方式创建自定义布局,但是有很多问题没有解决,如何创建模板使其看起来像默认布局。也许有更好的方法可以做到这一点?
- 新约会. 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="App.Controls.Popups.NewAppointmentPage"
Title="NewAppointmentPage">
<ContentPage.Content>
<StackLayout VerticalOptions="Center" HorizontalOptions="Center">
<Frame VerticalOptions="Center" CornerRadius="20" BackgroundColor="White">
<StackLayout Padding="50,50,50,50">
<ContentView x:Name="ContentView"/>
<StackLayout Orientation="Horizontal">
<Button Text="Confirm"></Button>
<Button Text="Cancel"></Button>
</StackLayout>
</StackLayout>
</Frame>
</StackLayout>
</ContentPage.Content>
</ContentPage>
- 新约会. xaml.cs:**
using System.Windows.Input;
namespace App.Controls.Popups;
public partial class NewAppointmentPage : ContentPage
{
public NewAppointmentPage()
{
InitializeComponent();
this.BackgroundColor = Color.FromArgb("#80000000");
}
public static readonly BindableProperty PopupContentProperty = BindableProperty.Create(
propertyName: nameof(PopupContent),
returnType: typeof(View),
declaringType: typeof(NewAppointmentPage),
defaultValue: null,
defaultBindingMode: BindingMode.OneWay,
propertyChanged: PopupContentPropertyChanged);
private static void PopupContentPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
NewAppointmentPage controls = (NewAppointmentPage)bindable;
if (newValue != null)
controls.ContentView.Content = (View)newValue;
}
private bool IsVisible;
public View PopupContent
{
get => (View)GetValue(PopupContentProperty);
set { SetValue(PopupContentProperty, value); }
}
public ICommand PopModelCommand => new Command(async () =>
{
await App.Current.MainPage.Navigation.PopModalAsync();
});
}
然后在HomeViewModel.cs中:
private async void AddNewRecord()
{
await App.Current.MainPage.Navigation.PushModalAsync(new NewAppointmentPage());
}
2条答案
按热度按时间ruarlubt1#
MAUI不支持开箱即用的自定义弹出窗口,但您可以使用MAUI community toolkit package中的
Popup
,MAUI community toolkit package使用本机平台弹出窗口,许多选项已经实现。2ekbmq322#
使用MAUI community toolkit可以创建“自定义弹出窗口”
下面是一个示例(Pago_OK.xaml):
Pago_OK.xaml.cs
您可以这样调用弹出窗口:
请记住,您可以有一个PopupViewModel在它里面,你可以编辑弹出作为一个自定义页面。希望它有帮助!