Browse Source

DateTimePicker and TimePicker: added Watermark and WatermarkTemplate properties. Also fixed small bug in the DateTimePicker.

pull/1645/head
brianlagunas_cp 15 years ago
parent
commit
c3b25b60ad
  1. 44
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/DateTimePicker/Implementation/DateTimePicker.cs
  2. 16
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/DateTimePicker/Themes/Generic.xaml
  3. 22
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/DateTimeUpDown/Implementation/DateTimeUpDown.cs
  4. 24
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TimePicker/Implementation/TimePicker.cs
  5. 9
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TimePicker/Themes/Generic.xaml

44
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/DateTimePicker/Implementation/DateTimePicker.cs

@ -100,6 +100,28 @@ namespace Microsoft.Windows.Controls
#endregion //ShowButtonSpinner
#region TimeWatermark
public static readonly DependencyProperty TimeWatermarkProperty = DependencyProperty.Register("TimeWatermark", typeof(object), typeof(DateTimePicker), new UIPropertyMetadata(null));
public object TimeWatermark
{
get { return (object)GetValue(TimeWatermarkProperty); }
set { SetValue(TimeWatermarkProperty, value); }
}
#endregion //TimeWatermark
#region TimeWatermarkTemplate
public static readonly DependencyProperty TimeWatermarkTemplateProperty = DependencyProperty.Register("TimeWatermarkTemplate", typeof(DataTemplate), typeof(DateTimePicker), new UIPropertyMetadata(null));
public DataTemplate TimeWatermarkTemplate
{
get { return (DataTemplate)GetValue(TimeWatermarkTemplateProperty); }
set { SetValue(TimeWatermarkTemplateProperty, value); }
}
#endregion //TimeWatermarkTemplate
#region Value
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(DateTime?), typeof(DateTimePicker), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnValueChanged, OnCoerceValue));
@ -142,6 +164,28 @@ namespace Microsoft.Windows.Controls
#endregion //Value
#region Watermark
public static readonly DependencyProperty WatermarkProperty = DependencyProperty.Register("Watermark", typeof(object), typeof(DateTimePicker), new UIPropertyMetadata(null));
public object Watermark
{
get { return (object)GetValue(WatermarkProperty); }
set { SetValue(WatermarkProperty, value); }
}
#endregion //Watermark
#region WatermarkTemplate
public static readonly DependencyProperty WatermarkTemplateProperty = DependencyProperty.Register("WatermarkTemplate", typeof(DataTemplate), typeof(DateTimePicker), new UIPropertyMetadata(null));
public DataTemplate WatermarkTemplate
{
get { return (DataTemplate)GetValue(WatermarkTemplateProperty); }
set { SetValue(WatermarkTemplateProperty, value); }
}
#endregion //WatermarkTemplate
#endregion //Properties
#region Constructors

16
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/DateTimePicker/Themes/Generic.xaml

@ -6,6 +6,10 @@
<coreConverters:InverseBoolConverter x:Key="InverseBoolConverter" />
<DataTemplate x:Key="DefaultWatermarkTemplate">
<ContentControl Content="{Binding}" Foreground="Gray" Focusable="False" />
</DataTemplate>
<LinearGradientBrush x:Key="PopupDarkBorderBrush" EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFA3AEB9" Offset="0"/>
<GradientStop Color="#FF8399A9" Offset="0.375"/>
@ -55,6 +59,8 @@
<!-- =============================================================================== -->
<Style TargetType="{x:Type local:DateTimePicker}">
<Setter Property="TimeWatermarkTemplate" Value="{StaticResource DefaultWatermarkTemplate}" />
<Setter Property="WatermarkTemplate" Value="{StaticResource DefaultWatermarkTemplate}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:DateTimePicker}">
@ -69,7 +75,9 @@
AllowSpin="{TemplateBinding AllowSpin}"
Format="{TemplateBinding Format}" FormatString="{TemplateBinding FormatString}"
ShowButtonSpinner="{TemplateBinding ShowButtonSpinner}"
Value="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}" />
Value="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}"
Watermark="{TemplateBinding Watermark}"
WatermarkTemplate="{TemplateBinding WatermarkTemplate}" />
<ToggleButton x:Name="_calendarToggleButton" Grid.Column="1" Background="White"
IsChecked="{Binding IsOpen, RelativeSource={RelativeSource TemplatedParent}}"
Style="{StaticResource DateTimePickerToggleButtonStyle}"
@ -79,7 +87,11 @@
<Border BorderThickness="1" Background="{StaticResource PopupBackgroundBrush}" BorderBrush="{StaticResource PopupDarkBorderBrush}" Padding="3">
<StackPanel>
<Calendar x:Name="Part_Calendar" BorderThickness="0" />
<local:TimePicker x:Name="Part_TimeUpDown" Format="ShortTime" Value="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}" />
<local:TimePicker x:Name="Part_TimeUpDown"
Format="ShortTime"
Value="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}"
Watermark="{TemplateBinding TimeWatermark}"
WatermarkTemplate="{TemplateBinding TimeWatermarkTemplate}"/>
</StackPanel>
</Border>
</Popup>

22
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/DateTimeUpDown/Implementation/DateTimeUpDown.cs

@ -24,8 +24,6 @@ namespace Microsoft.Windows.Controls
private DateTimeFormatInfo DateTimeFormatInfo { get; set; }
//TODO: add minimum and maximum properties
#region DefaultValue
public static readonly DependencyProperty DefaultValueProperty = DependencyProperty.Register("DefaultValue", typeof(DateTime), typeof(DateTimeUpDown), new UIPropertyMetadata(DateTime.Now));
@ -55,9 +53,13 @@ namespace Microsoft.Windows.Controls
protected virtual void OnFormatChanged(DateTimeFormat oldValue, DateTimeFormat newValue)
{
_dateTimeParser.Format = GetFormatString(newValue);
//if using a CustomFormat then the initialization occurs on the CustomFormatString property
if (newValue != DateTimeFormat.Custom)
InitializeDateTimeInfoListAndParseValue();
Text = ConvertValueToText();
}
#endregion //Format
@ -88,6 +90,18 @@ namespace Microsoft.Windows.Controls
#endregion //FormatString
#region Maximum
#endregion //Maximum
#region Minimum
#endregion //Minimum
#endregion //Properties
#region Constructors
@ -100,6 +114,7 @@ namespace Microsoft.Windows.Controls
public DateTimeUpDown()
{
DateTimeFormatInfo = DateTimeFormatInfo.GetInstance(CultureInfo);
_dateTimeParser = new DateTimeParser(DateTimeFormatInfo, GetFormatString(Format));
InitializeDateTimeInfoList();
}
@ -164,9 +179,6 @@ namespace Microsoft.Windows.Controls
return;
}
if (_dateTimeParser == null)
_dateTimeParser = new DateTimeParser(DateTimeFormatInfo, GetFormatString(Format));
DateTime current = Value.HasValue ? Value.Value : DateTime.Now;
DateTime result;
var success = _dateTimeParser.TryParse(currentValue, out result, current);

24
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TimePicker/Implementation/TimePicker.cs

@ -249,7 +249,7 @@ namespace Microsoft.Windows.Controls
protected virtual void OnValueChanged(DateTime? oldValue, DateTime? newValue)
{
//TODO: refactor this
if (newValue.HasValue)
if (newValue.HasValue && _timeListBox != null)
{
var items = _timeListBox.ItemsSource;
foreach (TimeItem item in items)
@ -267,6 +267,28 @@ namespace Microsoft.Windows.Controls
#endregion //Value
#region Watermark
public static readonly DependencyProperty WatermarkProperty = DependencyProperty.Register("Watermark", typeof(object), typeof(TimePicker), new UIPropertyMetadata(null));
public object Watermark
{
get { return (object)GetValue(WatermarkProperty); }
set { SetValue(WatermarkProperty, value); }
}
#endregion //Watermark
#region WatermarkTemplate
public static readonly DependencyProperty WatermarkTemplateProperty = DependencyProperty.Register("WatermarkTemplate", typeof(DataTemplate), typeof(TimePicker), new UIPropertyMetadata(null));
public DataTemplate WatermarkTemplate
{
get { return (DataTemplate)GetValue(WatermarkTemplateProperty); }
set { SetValue(WatermarkTemplateProperty, value); }
}
#endregion //WatermarkTemplate
#endregion //Properties
#region Constructors

9
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TimePicker/Themes/Generic.xaml

@ -11,6 +11,10 @@
<coreConverters:InverseBoolConverter x:Key="InverseBoolConverter" />
<coreConverters:TimeFormatToDateTimeFormatConverter x:Key="TimeFormatToDateTimeFormatConverter" />
<DataTemplate x:Key="DefaultWatermarkTemplate">
<ContentControl Content="{Binding}" Foreground="Gray" Focusable="False" />
</DataTemplate>
<LinearGradientBrush x:Key="PopupDarkBorderBrush" EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFA3AEB9" Offset="0"/>
<GradientStop Color="#FF8399A9" Offset="0.375"/>
@ -83,6 +87,7 @@
<!-- =============================================================================== -->
<Style TargetType="{x:Type local:TimePicker}">
<Setter Property="WatermarkTemplate" Value="{StaticResource DefaultWatermarkTemplate}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:TimePicker}">
@ -98,7 +103,9 @@
Format="{TemplateBinding Format, Converter={StaticResource TimeFormatToDateTimeFormatConverter}}"
FormatString="{TemplateBinding FormatString}"
ShowButtonSpinner="{TemplateBinding ShowButtonSpinner}"
Value="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}" />
Value="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}"
Watermark="{TemplateBinding Watermark}"
WatermarkTemplate="{TemplateBinding WatermarkTemplate}"/>
<ToggleButton x:Name="_timePickerToggleButton" Grid.Column="1"
IsChecked="{Binding IsOpen, RelativeSource={RelativeSource TemplatedParent}}"
Style="{StaticResource TimePickerToggleButtonStyle}"

Loading…
Cancel
Save