Articles in this section
Category / Section

How to dynamically change the themes in Xamarin Schedule (SfSchedule)

1 min read

You can dynamically change the themes by removing the dark theme and adding the light theme in Xamarin.Forms SfSchedule.

XAML

Add the SchedulerBehavior class to the Schedule.

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="0.1*"/>
            <RowDefinition Height="0.9*"/>
        </Grid.RowDefinitions>
        <Button x:Name="theme" Text="change theme"/>
        <syncfusion:SfSchedule x:Name="schedule" 
                               Grid.Row="1" 
                               ScheduleView="MonthView">
        </syncfusion:SfSchedule>
    </Grid>
    <ContentPage.Behaviors>
        <local:SchedulerBehavior/>
    </ContentPage.Behaviors>

C#

You can change the theme at runtime by removing the dark theme and adding the light theme.

    public class SchedulerBehavior : Behavior<ContentPage>
    {
        SfSchedule schedule;
        Button button;
        protected override void OnAttachedTo(ContentPage bindable)
        {
            base.OnAttachedTo(bindable);
            this.schedule = bindable.FindByName<SfSchedule>("schedule");
            this.button = bindable.FindByName<Button>("theme");
 
            this.WireEvents();
        }
        private void WireEvents()
        {
            this.button.Clicked += Theme_Clicked;
        }
        private void Theme_Clicked(object sender, EventArgs e)
        {
            ICollection<ResourceDictionary> mergedDictionaries = Application.Current.Resources.MergedDictionaries;
            var darkTheme = mergedDictionaries.OfType<DarkTheme>().FirstOrDefault();
            var lightTheme = mergedDictionaries.OfType<LightTheme>().FirstOrDefault();
            if (darkTheme != null)
            {
                mergedDictionaries.Remove(darkTheme);
                mergedDictionaries.Add(new LightTheme());
            }
            else
            {
                mergedDictionaries.Remove(lightTheme);
                mergedDictionaries.Add(new DarkTheme());
            }
        }
        protected override void OnDetachingFrom(ContentPage bindable)
        {
            base.OnDetachingFrom(bindable);
            this.UnWireEvents();
        }
        private void UnWireEvents()
        {
            this.button.Clicked -= Theme_Clicked;
        }
    }

View sample in GitHub

Demo image for Theme

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please  to leave a comment
Access denied
Access denied