| File: WindowSpanModeStateTrigger.cs | Web Access |
| Project: src\src\Controls\Foldable\src\Controls.Foldable.csproj (Microsoft.Maui.Controls.Foldable) |
using System.ComponentModel; using Microsoft.Maui.Controls; using Microsoft.Maui.Foldable; namespace Microsoft.Maui.Controls.Foldable { /// <summary> /// Triggers a state change when the <see cref="Microsoft.Maui.Controls.Foldable.TwoPaneViewMode"/> /// of the window changes. /// </summary> public sealed class WindowSpanModeStateTrigger : StateTriggerBase { public WindowSpanModeStateTrigger() { UpdateState(); } /// <summary> /// <see cref="Microsoft.Maui.Controls.Foldable.TwoPaneViewMode"/> /// which indicates the span mode to which the visual state should be applied. /// </summary> public TwoPaneViewMode SpanMode { get => (TwoPaneViewMode)GetValue(SpanModeProperty); set => SetValue(SpanModeProperty, value); } /// <summary>Bindable property for <see cref="SpanMode"/>.</summary> public static readonly BindableProperty SpanModeProperty = BindableProperty.Create(nameof(SpanMode), typeof(TwoPaneViewMode), typeof(WindowSpanModeStateTrigger), default(TwoPaneViewMode), propertyChanged: OnSpanModeChanged); static void OnSpanModeChanged(BindableObject bindable, object oldvalue, object newvalue) { ((WindowSpanModeStateTrigger)bindable).UpdateState(); } protected override void OnAttached() { base.OnAttached(); if (!DesignMode.IsDesignModeEnabled) { UpdateState(); DualScreenInfo.Current.PropertyChanged += OnDualScreenInfoPropertyChanged; } } protected override void OnDetached() { base.OnDetached(); DualScreenInfo.Current.PropertyChanged -= OnDualScreenInfoPropertyChanged; } void OnDualScreenInfoPropertyChanged(object sender, PropertyChangedEventArgs e) { UpdateState(); } void UpdateState() { var spanMode = DualScreenInfo.Current.SpanMode; switch (SpanMode) { case TwoPaneViewMode.SinglePane: SetActive(spanMode == TwoPaneViewMode.SinglePane); break; case TwoPaneViewMode.Tall: SetActive(spanMode == TwoPaneViewMode.Tall); break; case TwoPaneViewMode.Wide: SetActive(spanMode == TwoPaneViewMode.Wide); break; } } } }