diff --git a/src/Uno.UI/Generated/3.0.0.0/Windows.UI.Xaml.Controls/TimePicker.cs b/src/Uno.UI/Generated/3.0.0.0/Windows.UI.Xaml.Controls/TimePicker.cs index 36f727132c75..609a1d42a707 100644 --- a/src/Uno.UI/Generated/3.0.0.0/Windows.UI.Xaml.Controls/TimePicker.cs +++ b/src/Uno.UI/Generated/3.0.0.0/Windows.UI.Xaml.Controls/TimePicker.cs @@ -35,7 +35,7 @@ public int MinuteIncrement } } #endif - #if __ANDROID__ || __IOS__ || NET461 || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__ + #if false || false || false || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || false [global::Uno.NotImplemented("__ANDROID__", "__IOS__", "NET461", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")] public global::Windows.UI.Xaml.DataTemplate HeaderTemplate { @@ -49,7 +49,7 @@ public int MinuteIncrement } } #endif - #if __ANDROID__ || __IOS__ || NET461 || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__ + #if false || false || false || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || false [global::Uno.NotImplemented("__ANDROID__", "__IOS__", "NET461", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")] public object Header { @@ -93,7 +93,7 @@ public object Header } #endif // Skipping already declared property ClockIdentifierProperty - #if __ANDROID__ || __IOS__ || NET461 || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__ + #if false || false || false || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || false [global::Uno.NotImplemented("__ANDROID__", "__IOS__", "NET461", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")] public static global::Windows.UI.Xaml.DependencyProperty HeaderProperty { get; } = Windows.UI.Xaml.DependencyProperty.Register( @@ -101,7 +101,7 @@ public object Header typeof(global::Windows.UI.Xaml.Controls.TimePicker), new FrameworkPropertyMetadata(default(object))); #endif - #if __ANDROID__ || __IOS__ || NET461 || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__ + #if false || false || false || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || false [global::Uno.NotImplemented("__ANDROID__", "__IOS__", "NET461", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")] public static global::Windows.UI.Xaml.DependencyProperty HeaderTemplateProperty { get; } = Windows.UI.Xaml.DependencyProperty.Register( diff --git a/src/Uno.UI/UI/Xaml/Controls/TimePicker/TimePicker.cs b/src/Uno.UI/UI/Xaml/Controls/TimePicker/TimePicker.cs index f49acfc96467..38ae9de77445 100644 --- a/src/Uno.UI/UI/Xaml/Controls/TimePicker/TimePicker.cs +++ b/src/Uno.UI/UI/Xaml/Controls/TimePicker/TimePicker.cs @@ -23,12 +23,15 @@ public partial class TimePicker : Control public const string ThirdTextBlockColumnPartName = "ThirdTextBlockColumn"; //AM/PM column public const string FlyoutButtonContentGridPartName = "FlyoutButtonContentGrid"; + private const string HeaderContentPresenterPartName = "HeaderContentPresenter"; + private Button _flyoutButton; private TextBlock _hourTextBlock; private TextBlock _minuteTextBlock; private TextBlock _periodTextBlock; private Grid _flyoutButtonContentGrid; private ColumnDefinition _thirdTextBlockColumn; + private ContentPresenter _headerContentPresenter; private bool _isLoaded; private bool _isViewReady; @@ -43,13 +46,13 @@ public TimePicker() public TimeSpan Time { - get { return (TimeSpan)this.GetValue(TimeProperty); } - set { this.SetValue(TimeProperty, value); } + get => (TimeSpan)this.GetValue(TimeProperty); + set => this.SetValue(TimeProperty, value); } public static DependencyProperty TimeProperty { get ; } = DependencyProperty.Register( - "Time", + nameof(Time), typeof(TimeSpan), typeof(TimePicker), new FrameworkPropertyMetadata( @@ -69,13 +72,13 @@ public TimeSpan Time public int MinuteIncrement { - get { return (int)this.GetValue(MinuteIncrementProperty); } - set { this.SetValue(MinuteIncrementProperty, value); } + get => (int)this.GetValue(MinuteIncrementProperty); + set => this.SetValue(MinuteIncrementProperty, value); } public static DependencyProperty MinuteIncrementProperty { get ; } = DependencyProperty.Register( - "MinuteIncrement", + nameof(MinuteIncrement), typeof(int), typeof(TimePicker), new FrameworkPropertyMetadata( @@ -102,13 +105,13 @@ public int MinuteIncrement public FlyoutPlacementMode FlyoutPlacement { - get { return (FlyoutPlacementMode)this.GetValue(FlyoutPlacementProperty); } - set { this.SetValue(FlyoutPlacementProperty, value); } + get => (FlyoutPlacementMode)this.GetValue(FlyoutPlacementProperty); + set => this.SetValue(FlyoutPlacementProperty, value); } public static DependencyProperty FlyoutPlacementProperty { get ; } = DependencyProperty.Register( - "FlyoutPlacement", + nameof(FlyoutPlacement), typeof(FlyoutPlacementMode), typeof(TimePicker), new FrameworkPropertyMetadata(FlyoutPlacementMode.Full)); @@ -119,13 +122,13 @@ public FlyoutPlacementMode FlyoutPlacement // FlyoutPresenterStyle is an Uno-only property to allow the styling of the TimePicker's FlyoutPresenter. public Style FlyoutPresenterStyle { - get { return (Style)this.GetValue(FlyoutPresenterStyleProperty); } - set { this.SetValue(FlyoutPresenterStyleProperty, value); } + get => (Style)this.GetValue(FlyoutPresenterStyleProperty); + set => this.SetValue(FlyoutPresenterStyleProperty, value); } public static DependencyProperty FlyoutPresenterStyleProperty { get; } = DependencyProperty.Register( - "FlyoutPresenterStyle", + nameof(FlyoutPresenterStyle), typeof(Style), typeof(TimePicker), new FrameworkPropertyMetadata( @@ -134,34 +137,64 @@ public Style FlyoutPresenterStyle #endregion + #region HeaderTemplate DependencyProperty + + public DataTemplate HeaderTemplate + { + get => (DataTemplate)GetValue(HeaderTemplateProperty); + set => SetValue(HeaderTemplateProperty, value); + } + + public static DependencyProperty HeaderTemplateProperty { get; } = + DependencyProperty.Register( + nameof(HeaderTemplate), typeof(DataTemplate), + typeof(TimePicker), + new FrameworkPropertyMetadata(null)); + + #endregion + + #region Header DependencyProperty + + public object Header + { + get => GetValue(HeaderProperty); + set => SetValue(HeaderProperty, value); + } + + public static DependencyProperty HeaderProperty { get; } = + DependencyProperty.Register( + nameof(Header), typeof(object), + typeof(TimePicker), + new FrameworkPropertyMetadata(null, (s, e) => ((TimePicker)s)?.OnHeaderChanged(e))); + + private void OnHeaderChanged(DependencyPropertyChangedEventArgs e) => + UpdateHeaderVisibility(); + + #endregion + public LightDismissOverlayMode LightDismissOverlayMode { - get - { - return (LightDismissOverlayMode)this.GetValue(LightDismissOverlayModeProperty); - } - set - { - this.SetValue(LightDismissOverlayModeProperty, value); - } + get => (LightDismissOverlayMode)this.GetValue(LightDismissOverlayModeProperty); + set => this.SetValue(LightDismissOverlayModeProperty, value); } + public static DependencyProperty LightDismissOverlayModeProperty { get; } = - DependencyProperty.Register( - "LightDismissOverlayMode", typeof(LightDismissOverlayMode), - typeof(TimePicker), - new FrameworkPropertyMetadata(default(LightDismissOverlayMode))); + DependencyProperty.Register( + nameof(LightDismissOverlayMode), typeof(LightDismissOverlayMode), + typeof(TimePicker), + new FrameworkPropertyMetadata(default(LightDismissOverlayMode))); /// /// Sets the light-dismiss colour, if the overlay is enabled. The external API for modifying this is to override the PopupLightDismissOverlayBackground, etc, static resource values. /// internal Brush LightDismissOverlayBackground { - get { return (Brush)GetValue(LightDismissOverlayBackgroundProperty); } - set { SetValue(LightDismissOverlayBackgroundProperty, value); } + get => (Brush)GetValue(LightDismissOverlayBackgroundProperty); + set => SetValue(LightDismissOverlayBackgroundProperty, value); } internal static DependencyProperty LightDismissOverlayBackgroundProperty { get ; } = - DependencyProperty.Register("LightDismissOverlayBackground", typeof(Brush), typeof(TimePicker), new FrameworkPropertyMetadata(null)); + DependencyProperty.Register(nameof(LightDismissOverlayBackground), typeof(Brush), typeof(TimePicker), new FrameworkPropertyMetadata(null)); protected override void OnApplyTemplate() { @@ -176,6 +209,12 @@ protected override void OnApplyTemplate() _periodTextBlock = flyoutContent?.GetTemplateChild(PeriodTextBlockPartName) as TextBlock; _flyoutButtonContentGrid = flyoutContent?.GetTemplateChild(FlyoutButtonContentGridPartName) as Grid; + _headerContentPresenter = GetTemplateChild(HeaderContentPresenterPartName) as ContentPresenter; + if (_headerContentPresenter != null) + { + UpdateHeaderVisibility(); + } + var columns = _flyoutButtonContentGrid?.ColumnDefinitions; const int periodColumnPosition = 4; if ((columns?.Count ?? 0) > periodColumnPosition) @@ -277,6 +316,15 @@ private void UpdateDisplayedDate() #endif } + private void UpdateHeaderVisibility() + { + if (_headerContentPresenter != null) + { + _headerContentPresenter.Visibility = + Header != null ? Visibility.Visible : Visibility.Collapsed; + } + } + /// /// Apply 2-way binding to equivalent property on TimePickerFlyout ///