为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Xamarin Forms 中的按钮上创建网格

如何在 Xamarin Forms 中的按钮上创建网格

C#
宝慕林4294392 2022-01-09 16:36:54
所以我需要创建一个自定义按钮,在我必须创建的网格上,在这个网格上我需要创建几个带有特定信息的标签。这是我将孩子添加到按钮的代码    private void HighlightTodayDay()    {        Label label1 = new Label()        {            BackgroundColor = Color.DarkRed,            Text = "lbl1"        };        Label label2 = new Label()        {            BackgroundColor = Color.Gold,            Text = "lbl2"        };        if ((DateTime.Today.Year == actualVisibleMonth.Year) && (DateTime.Today.Month == actualVisibleMonth.Month))        {            foreach (var child in Children.Reverse())            {                if (child.ClassId.ToString() == ("actualDayButtonID" + DateTime.Today.Day.ToString()) && child.IsEnabled == true)                {                    DayButton todayDayButton = dayButtonsList[DateTime.Today.Day + shiftOfFirstDay];                    todayDayButton.TextColor = Color.FromHex("#0f0");                    //upto this line everything is working as it should                    todayDayButton.insideGrid.Children.Add(label1, 0, 0);  //do nothing                    todayDayButton.insideGrid.Children.Add(label2, 0, 1); //do nothing                    return;                }            }        }    }这是“自定义”按钮的代码    class DayButton : Button{    public string EventDate;    public string EventStartTime;    public string EventEndTime;    public string EventShift;    public string EventName;    public string EventDescription;    public Grid insideGrid;    public DayButton()    {        insideGrid = new Grid();        insideGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });        insideGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(3, GridUnitType.Star) });        insideGrid.Parent = this;    }}
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

我决定关闭按钮并将其更改为堆栈布局(恶心!),并为此堆栈布局添加带有事件的新标签!soo 代码如下所示:


public partial class Calendar : Grid

{...


    public delegate void OnDayClickedDelegate(DateTime dateOfClickedDay);

    public event OnDayClickedDelegate OnDayClicked;

...

        private void DayClick(DateTime clickedDate)

    {

        OnDayClicked(clickedDate);

    }

...

private void SomeVoid()

{...

 DayLayout eventInDay = dayLayoutList[dayID];

                var eventLabel = new Label

                {

                    BackgroundColor = color,

                    Text = name.ToUpper(),

                    FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Label)),

                    FontAttributes = FontAttributes.Bold

                };

                eventInDay.Children.Add(eventLabel);

...}

}


和日视图


        private class DayLayout : StackLayout

    {

        public delegate void OnClickedDelegate(DateTime dateOfClickedDay);

        public event OnClickedDelegate OnClicked;


        public Label DayNumber;


        public DayLayout(DateTime day)

        {

            GestureRecognizers.Add

            (

                new TapGestureRecognizer

                {

                    Command = new Command(() => OnClicked(day))

                }

            );


            var dayNumber = new Label

            {

                HorizontalTextAlignment = TextAlignment.End,

                VerticalTextAlignment = TextAlignment.Start,

                Text = day.ToString("dd"),

                FontSize = Device.GetNamedSize(NamedSize.Micro, typeof(Label)),

                FontAttributes = FontAttributes.Bold

            };


            DayNumber = dayNumber;

            this.Children.Add(DayNumber);

        }

    }


查看完整回答
反对 回复 2022-01-09
?
Qyouu

TA贡献1786条经验 获得超11个赞

您可以将 GestureRecognizer 添加到 Grid 中,然后绑定点击事件。


Ex 按钮代码(现在是 ContentView):


            class DayButton : ContentView

        {

            public string EventDate;

            public string EventStartTime;

            public string EventEndTime;

            public string EventShift;

            public string EventName;

            public string EventDescription;

            public Grid insideGrid;


            public event EventHandler Clicked;


            private TapGestureRecognizer _buttonTap;

            private Lable _ButtonText;


            public DayButton()

            {

                _ButtonText = new Lable 

                { 

                      Text = EventName

                }


                insideGrid = new Grid

            {

                VerticalOptions = LayoutOptions.FillAndExpand,

                HorizontalOptions = LayoutOptions.FillAndExpand,

                RowSpacing = 0,


                RowDefinitions =

                {

                    new RowDefinition {Height = GridLength.Auto} //0

                },

                ColumnDefinitions =

                {

                    new ColumnDefinition {Width = GridLength.Star} //0

                }

            };


               //Add your elements to the grid

               insideGrid.Children.Add(_ButtonText, 0, 1, 0, 1)


               //Set the grid as the content of this view

               Content = insideGrid;




                _buttonTap = new TapGestureRecognizer();

                this.GestureRecognizers.Add(_buttonTap);

                _buttonTap.Tapped += ButtonClicked;

            }

        }


            private async void ButtonClicked(object sender, EventArgs e)

            {

                if (this.IsEnabled)

                {

                    Clicked?.Invoke(this, e);

                }


            }

然后,您可以在实现按钮的位置绑定“Clicked”事件。


private DayButton _btn1 = new DayButton(){ EventName = "FooBaar"};


protected override void OnAppearing()

{

   _btn1.Clicked += OnDayBtnClicked;

   base.OnAppearing();

}


protected override void OnDisappearing()

{

   _btn1.Clicked -= OnDayBtnClicked;

   base.OnDisappearing();

}


private void OnDayBtnClicked(object sender, EventArgs e)

{

     //What to do when a button is clicked

}


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号