猿问

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

所以我需要创建一个自定义按钮,在我必须创建的网格上,在这个网格上我需要创建几个带有特定信息的标签。这是我将孩子添加到按钮的代码


    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;

    }

}


宝慕林4294392
浏览 162回答 2
2回答

素胚勾勒不出你

我决定关闭按钮并将其更改为堆栈布局(恶心!),并为此堆栈布局添加带有事件的新标签!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);        }    }

Qyouu

您可以将 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}
随时随地看视频慕课网APP
我要回答