首页 > 解决方案 > 对话框 xamarin 中的单选按钮组

问题描述

如何在 xamarin 表单中添加弹出窗口或对话框,如单选按钮组选择。我正在使用android和java。

单击时应打开并进行选择。

标签: xamarin.forms

解决方案


我写了一个关于它的演示。使用Rg.Plugins.Popupand MessagingCenter(传输数据)来实现它。

这里正在运行 GIF。

在此处输入图像描述

如果我们想使用Rg.Plugins.Popupand ,我们应该在方法RadioButton中添加以下代码。OnCreate

  public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Rg.Plugins.Popup.Popup.Init(this, savedInstanceState);
            Forms.SetFlags("RadioButton_Experimental");

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);


            LoadApplication(new App());
        }

这是MainPage.xaml

 <StackLayout>

        <!-- Place new controls here -->
        <Label x:Name="myLabel" 
           HorizontalOptions="Center"
           VerticalOptions="CenterAndExpand" />
        <Button Text="play" Clicked="Button_Clicked"></Button>
    </StackLayout>

这是MainPage.xaml.cs,我曾经MessagingCenter.Subscribe从弹出页面接收数据。

 public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();


                MessagingCenter.Subscribe<App, string>(App.Current, "OpenPage", (snd, arg) =>
                {
                    myLabel.Text = arg;
                });
        }

        private async void Button_Clicked(object sender, EventArgs e)
        {
            await Navigation.PushPopupAsync(new Page1());

        }

这是弹出页面,Page1.xaml

<?xml version="1.0" encoding="utf-8" ?>
<pages:PopupPage  xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup"
             xmlns:animations="clr-namespace:Rg.Plugins.Popup.Animations;assembly=Rg.Plugins.Popup"
             mc:Ignorable="d"
             x:Class="MinitorMediaManager.Page1">
    <pages:PopupPage.Animation>
        <animations:ScaleAnimation 
            PositionIn="Center"
            PositionOut="Center"
            ScaleIn="1.2"
            ScaleOut="0.8"
            DurationIn="400"
            DurationOut="300"
            EasingIn="SinOut"
            EasingOut="SinIn"
            HasBackgroundAnimation="True"/>
    </pages:PopupPage.Animation>
    <!--You can use any elements here which are extended from Xamarin.Forms.View-->
    <Frame  VerticalOptions="Center" 
        HorizontalOptions="Center" >
    <StackLayout 

        Padding="20, 20, 20, 20">

        <Label Text="What's your favorite animal?" />
        <RadioButton Text="Cat" x:Name="IsCat" CheckedChanged="IsCat_CheckedChanged" />
        <RadioButton Text="Dog" x:Name="IsDog" CheckedChanged="IsDog_CheckedChanged"/>
        <Button Text="Ok" Clicked="Button_Clicked"></Button>

    </StackLayout>
    </Frame>
</pages:PopupPage>

这是弹出页面的背景代码,Page1.xaml.cs我曾经MessagingCenter.Send将数据从弹出页面发送到主页面。

   public partial class Page1 : Rg.Plugins.Popup.Pages.PopupPage
    {
        bool IsCatSelect;
        bool IsDogSelect;
        public Page1()
        {
            InitializeComponent();
        }

        private void IsCat_CheckedChanged(object sender, CheckedChangedEventArgs e)
        {
             IsCatSelect = e.Value;
        }

        private void IsDog_CheckedChanged(object sender, CheckedChangedEventArgs e)
        {
            IsDogSelect = e.Value;
        }

        private async void Button_Clicked(object sender, EventArgs e)
        {
            MessagingCenter.Send<App, string>(App.Current as App, "OpenPage", "IsCatSelect: " + IsCatSelect.ToString()+ "  IsCatSelect: "+IsDogSelect.ToString());
            await Navigation.PopPopupAsync();
        }
    }

推荐阅读