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
///