提交记录修改UI/Controls/DatePickerBar/DatePickerBar.cs+118 −19看文件
修改UI/Themes/DatePickerBar/DatePickerBar.xaml+110 −2看文件
| @@ -7,9 +7,11 @@ using System.Linq; | ||
| 7 | 7 | using System.Text; |
| 8 | 8 | using System.Windows; |
| 9 | 9 | using System.Windows.Controls; |
| 10 | 新增:using System.Windows.Controls.Primitives; | |
| 10 | 11 | using System.Windows.Input; |
| 11 | 12 | using System.Windows.Media; |
| 12 | 13 | using System.Windows.Media.Animation; |
| 14 | 新增:using UI.Controls.List; | |
| 13 | 15 | using UI.Controls.Navigation.Models; |
| 14 | 16 | |
| 15 | 17 | namespace UI.Controls.DatePickerBar |
| @@ -29,7 +31,7 @@ namespace UI.Controls.DatePickerBar | ||
| 29 | 31 | var control = d as DatePickerBar; |
| 30 | 32 | if (e.NewValue != e.OldValue) |
| 31 | 33 | { |
| 32 | 删除: control.Render(); | |
| 34 | 新增: control.Render(control.SelectedDate); | |
| 33 | 35 | } |
| 34 | 36 | } |
| 35 | 37 | |
| @@ -59,6 +61,21 @@ namespace UI.Controls.DatePickerBar | ||
| 59 | 61 | public static readonly DependencyProperty SelectedDateStringProperty = |
| 60 | 62 | DependencyProperty.Register("SelectedDateString", typeof(string), typeof(DatePickerBar)); |
| 61 | 63 | |
| 64 | 新增: /// <summary> | |
| 65 | 新增: /// 是否显示日期选择弹出层 | |
| 66 | 新增: /// </summary> | |
| 67 | 新增: public bool IsShowDatePickerPopup | |
| 68 | 新增: { | |
| 69 | 新增: get { return (bool)GetValue(IsShowDatePickerPopupProperty); } | |
| 70 | 新增: set { SetValue(IsShowDatePickerPopupProperty, value); } | |
| 71 | 新增: } | |
| 72 | 新增: public static readonly DependencyProperty IsShowDatePickerPopupProperty = | |
| 73 | 新增: DependencyProperty.Register("IsShowDatePickerPopup", typeof(bool), typeof(DatePickerBar)); | |
| 74 | 新增: | |
| 75 | 新增: | |
| 76 | 新增: | |
| 77 | 新增: | |
| 78 | 新增: | |
| 62 | 79 | private StackPanel Container; |
| 63 | 80 | private ScrollViewer ScrollViewer; |
| 64 | 81 | private Dictionary<DateTime, DatePickerBarItem> ItemsDictionary; |
| @@ -70,6 +87,12 @@ namespace UI.Controls.DatePickerBar | ||
| 70 | 87 | private Border ActiveBlock; |
| 71 | 88 | // 动画 |
| 72 | 89 | Storyboard storyboard; |
| 90 | 新增: // 日期选择弹出层 | |
| 91 | 新增: private Popup DatePickerPopup; | |
| 92 | 新增: private BaseList YearsList, MonthsList; | |
| 93 | 新增: private Border Date; | |
| 94 | 新增: private ScrollViewer YearsListScrollViewer; | |
| 95 | 新增: private StackPanel MonthSelect; | |
| 73 | 96 | public DatePickerBar() |
| 74 | 97 | { |
| 75 | 98 | DefaultStyleKey = typeof(DatePickerBar); |
| @@ -86,12 +109,86 @@ namespace UI.Controls.DatePickerBar | ||
| 86 | 109 | Container = GetTemplateChild("Container") as StackPanel; |
| 87 | 110 | ActiveBlock = GetTemplateChild("ActiveBlock") as Border; |
| 88 | 111 | ScrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer; |
| 89 | 删除: Render(); | |
| 112 | 新增: DatePickerPopup = GetTemplateChild("DatePickerPopup") as Popup; | |
| 113 | 新增: Date = GetTemplateChild("Date") as Border; | |
| 114 | 新增: YearsList = GetTemplateChild("YearsList") as BaseList; | |
| 115 | 新增: MonthsList = GetTemplateChild("MonthsList") as BaseList; | |
| 116 | 新增: YearsListScrollViewer = GetTemplateChild("YearsListScrollViewer") as ScrollViewer; | |
| 117 | 新增: MonthSelect = GetTemplateChild("MonthSelect") as StackPanel; | |
| 118 | 新增: | |
| 119 | 新增: Init(); | |
| 120 | 新增: | |
| 121 | 新增: // 渲染日期 | |
| 122 | 新增: Render(DateTime.Now); | |
| 90 | 123 | |
| 91 | 124 | |
| 92 | 125 | } |
| 93 | 126 | |
| 127 | 新增: /// <summary> | |
| 128 | 新增: /// 初始化控件数据 | |
| 129 | 新增: /// </summary> | |
| 130 | 新增: private void Init() | |
| 131 | 新增: { | |
| 132 | 新增: DatePickerPopup.Closed += (e, c) => | |
| 133 | 新增: { | |
| 134 | 新增: IsShowDatePickerPopup = false; | |
| 135 | 新增: VisualStateManager.GoToState(this, "Normal", true); | |
| 136 | 新增: }; | |
| 137 | 新增: | |
| 138 | 新增: Date.MouseEnter += (e, c) => | |
| 139 | 新增: { | |
| 140 | 新增: VisualStateManager.GoToState(this, "DateMouseOver", true); | |
| 141 | 新增: }; | |
| 142 | 新增: Date.MouseLeave += (e, c) => | |
| 143 | 新增: { | |
| 144 | 新增: VisualStateManager.GoToState(this, "Normal", true); | |
| 145 | 新增: }; | |
| 146 | 新增: Date.MouseLeftButtonUp += (e, c) => | |
| 147 | 新增: { | |
| 148 | 新增: IsShowDatePickerPopup = true; | |
| 149 | 新增: VisualStateManager.GoToState(this, "ShowPopup", true); | |
| 150 | 新增: }; | |
| 151 | 新增: | |
| 152 | 新增: // 填充年份数据 | |
| 153 | 新增: YearsList.SelectedItem = DateTime.Now.Year.ToString(); | |
| 154 | 新增: //YearsList.SelectedItem = "2073"; | |
| 155 | 新增: | |
| 156 | 新增: for (int i = 2021; i <= DateTime.Now.Year; i++) | |
| 157 | 新增: { | |
| 158 | 新增: YearsList.Items.Add(i.ToString()); | |
| 159 | 新增: } | |
| 160 | 新增: YearsList.SelectedItemChanged += DateChanged; | |
| 94 | 161 | |
| 162 | 新增: if (ShowType == DatePickerShowType.Day) | |
| 163 | 新增: { | |
| 164 | 新增: // 填充月份数据 | |
| 165 | 新增: MonthSelect.Visibility = Visibility.Visible; | |
| 166 | 新增: | |
| 167 | 新增: MonthsList.SelectedItem = DateTime.Now.Month.ToString(); | |
| 168 | 新增: //MonthsList.SelectedItem = "1"; | |
| 169 | 新增: | |
| 170 | 新增: for (int i = 1; i <= 12; i++) | |
| 171 | 新增: { | |
| 172 | 新增: MonthsList.Items.Add(i.ToString()); | |
| 173 | 新增: } | |
| 174 | 新增: | |
| 175 | 新增: MonthsList.SelectedItemChanged += DateChanged; | |
| 176 | 新增: | |
| 177 | 新增: } | |
| 178 | 新增: } | |
| 179 | 新增: | |
| 180 | 新增: private void DateChanged(object sender, EventArgs e) | |
| 181 | 新增: { | |
| 182 | 新增: if (ShowType == DatePickerShowType.Day) | |
| 183 | 新增: { | |
| 184 | 新增: SelectedDate = new DateTime(int.Parse(YearsList.SelectedItem), int.Parse(MonthsList.SelectedItem), 1); | |
| 185 | 新增: } | |
| 186 | 新增: else | |
| 187 | 新增: { | |
| 188 | 新增: SelectedDate = new DateTime(int.Parse(YearsList.SelectedItem), 1, 1); | |
| 189 | 新增: } | |
| 190 | 新增: Render(SelectedDate); | |
| 191 | 新增: } | |
| 95 | 192 | |
| 96 | 193 | private void AddItem(DateTime date) |
| 97 | 194 | { |
| @@ -167,7 +264,7 @@ namespace UI.Controls.DatePickerBar | ||
| 167 | 264 | |
| 168 | 265 | |
| 169 | 266 | |
| 170 | 删除: private void Render() | |
| 267 | 新增: private void Render(DateTime date) | |
| 171 | 268 | { |
| 172 | 269 | if (Container == null) |
| 173 | 270 | { |
| @@ -182,32 +279,34 @@ namespace UI.Controls.DatePickerBar | ||
| 182 | 279 | |
| 183 | 280 | if (ShowType == DatePickerShowType.Day) |
| 184 | 281 | { |
| 185 | 删除: dataCount = 41; | |
| 186 | 删除: | |
| 187 | 删除: // 前30天 | |
| 188 | 删除: for (int i = 1; i < 31; i++) | |
| 189 | 删除: { | |
| 190 | 删除: AddItem(DateTime.Now.Date.AddDays(-i)); | |
| 191 | 删除: } | |
| 282 | 新增: dataCount = DateTime.DaysInMonth(date.Year, date.Month); | |
| 192 | 283 | |
| 193 | 删除: AddItem(DateTime.Now.Date); | |
| 284 | 新增: //// 前30天 | |
| 285 | 新增: //for (int i = 1; i < 31; i++) | |
| 286 | 新增: //{ | |
| 287 | 新增: // AddItem(date.Date.AddDays(-i)); | |
| 288 | 新增: //} | |
| 194 | 289 | |
| 195 | 删除: // 后十天 | |
| 196 | 删除: for (int i = 1; i < 11; i++) | |
| 290 | 新增: //AddItem(date.Date); | |
| 291 | 新增: for (int i = 1; i <= dataCount; i++) | |
| 197 | 292 | { |
| 198 | 删除: AddItem(DateTime.Now.Date.AddDays(+i)); | |
| 293 | 新增: AddItem(new DateTime(date.Year, date.Month, i)); | |
| 199 | 294 | } |
| 295 | 新增: //// 后十天 | |
| 296 | 新增: //for (int i = 1; i < 11; i++) | |
| 297 | 新增: //{ | |
| 298 | 新增: // AddItem(DateTime.Now.Date.AddDays(+i)); | |
| 299 | 新增: //} | |
| 200 | 300 | } |
| 201 | 301 | |
| 202 | 302 | if (ShowType == DatePickerShowType.Month) |
| 203 | 303 | { |
| 204 | 304 | dataCount = 12; |
| 205 | 305 | |
| 206 | 删除: var nowDate = DateTime.Now; | |
| 207 | 306 | for (int i = 1; i < 13; i++) |
| 208 | 307 | { |
| 209 | 删除: var date = new DateTime(nowDate.Year, i, 1); | |
| 210 | 删除: AddMonthItem(date); | |
| 308 | 新增: var data = new DateTime(date.Year, i, 1); | |
| 309 | 新增: AddMonthItem(data); | |
| 211 | 310 | } |
| 212 | 311 | } |
| 213 | 312 | |
| @@ -266,7 +365,7 @@ namespace UI.Controls.DatePickerBar | ||
| 266 | 365 | |
| 267 | 366 | private void ScrollToActive(DateTime date) |
| 268 | 367 | { |
| 269 | 删除: | |
| 368 | 新增: | |
| 270 | 369 | if (ItemsDictionary.Count == 0) |
| 271 | 370 | { |
| 272 | 371 | return; |
| @@ -295,7 +394,7 @@ namespace UI.Controls.DatePickerBar | ||
| 295 | 394 | SelectedDate = date; |
| 296 | 395 | } |
| 297 | 396 | |
| 298 | 删除: | |
| 397 | 新增: | |
| 299 | 398 | ItemsDictionary[date].IsSelected = true; |
| 300 | 399 | |
| 301 | 400 | |
| @@ -1,7 +1,8 @@ | ||
| 1 | 1 | <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
| 2 | 2 | xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
| 3 | 3 | xmlns:local="clr-namespace:UI.Controls.DatePickerBar" |
| 4 | 删除: xmlns:base="clr-namespace:UI.Controls.Base"> | |
| 4 | 新增: xmlns:base="clr-namespace:UI.Controls.Base" | |
| 5 | 新增: xmlns:list="clr-namespace:UI.Controls.List"> | |
| 5 | 6 | <Style TargetType="{x:Type local:DatePickerBar}"> |
| 6 | 7 | <Setter Property="SnapsToDevicePixels" |
| 7 | 8 | Value="true" /> |
| @@ -12,7 +13,79 @@ | ||
| 12 | 13 | <ControlTemplate TargetType="{x:Type local:DatePickerBar}"> |
| 13 | 14 | <Border> |
| 14 | 15 | <StackPanel> |
| 15 | 删除: <TextBlock Foreground="#5c5c5c" FontSize="15" Text="{TemplateBinding SelectedDateString}" HorizontalAlignment="Center" Margin="0,10"/> | |
| 16 | 新增: <Grid x:Name="header"> | |
| 17 | 新增: <Border | |
| 18 | 新增: x:Name="Date" | |
| 19 | 新增: Background="Transparent" | |
| 20 | 新增: Padding="5,10" | |
| 21 | 新增: CornerRadius="12" | |
| 22 | 新增: Margin="0,0,0,10" | |
| 23 | 新增: HorizontalAlignment="Left" | |
| 24 | 新增: ToolTip="选择"> | |
| 25 | 新增: <StackPanel Orientation="Horizontal" > | |
| 26 | 新增: <base:Icon x:Name="DateIcon" Margin="0,0,5,0" IconType="DateTime" Foreground="Gray" VerticalAlignment="Center" HorizontalAlignment="Right"/> | |
| 27 | 新增: | |
| 28 | 新增: <TextBlock Foreground="#5c5c5c" FontSize="15" Text="{TemplateBinding SelectedDateString}" Margin="0,0" VerticalAlignment="Center" HorizontalAlignment="Left"/> | |
| 29 | 新增: <base:Icon x:Name="PopupIcon" Width="25" Height="25" Margin="10,0,0,0" FontSize="10" IconType="ChevronDown" VerticalAlignment="Center" HorizontalAlignment="Right"> | |
| 30 | 新增: <base:Icon.RenderTransform> | |
| 31 | 新增: <RotateTransform Angle="0" CenterX="12.5" CenterY="12.5"/> | |
| 32 | 新增: </base:Icon.RenderTransform> | |
| 33 | 新增: </base:Icon> | |
| 34 | 新增: </StackPanel> | |
| 35 | 新增: | |
| 36 | 新增: </Border> | |
| 37 | 新增: <Popup | |
| 38 | 新增: x:Name="DatePickerPopup" | |
| 39 | 新增: AllowsTransparency="True" | |
| 40 | 新增: IsOpen="{TemplateBinding IsShowDatePickerPopup}" | |
| 41 | 新增: Placement="Bottom" | |
| 42 | 新增: PlacementTarget="{Binding ElementName=Date}" | |
| 43 | 新增: PopupAnimation="Slide" | |
| 44 | 新增: StaysOpen="False"> | |
| 45 | 新增: <Border | |
| 46 | 新增: Background="White" | |
| 47 | 新增: CornerRadius="12" | |
| 48 | 新增: Padding="10" | |
| 49 | 新增: Margin="10"> | |
| 50 | 新增: <Border.Effect> | |
| 51 | 新增: <DropShadowEffect BlurRadius="10" ShadowDepth="0" Direction="0" Color="Gray" Opacity=".2"/> | |
| 52 | 新增: </Border.Effect> | |
| 53 | 新增: | |
| 54 | 新增: <Grid> | |
| 55 | 新增: <Path | |
| 56 | 新增: Width="15" | |
| 57 | 新增: Height="15" | |
| 58 | 新增: SnapsToDevicePixels="False" | |
| 59 | 新增: Data="M 0 15 L 7.5 7.5 L 15 15" Fill="White" | |
| 60 | 新增: Stroke="White" | |
| 61 | 新增: StrokeThickness="1" | |
| 62 | 新增: VerticalAlignment="Top" | |
| 63 | 新增: HorizontalAlignment="Left" | |
| 64 | 新增: Margin="0,-25,0,0" | |
| 65 | 新增: /> | |
| 66 | 新增: <StackPanel Orientation="Horizontal"> | |
| 67 | 新增: <!--<ScrollViewer x:Name="YearsListScrollViewer" CanContentScroll="True" VerticalScrollBarVisibility="Hidden">--> | |
| 68 | 新增: <StackPanel > | |
| 69 | 新增: <TextBlock Text="年份" HorizontalAlignment="Center"/> | |
| 70 | 新增: <list:BaseList x:Name="YearsList" Height="120" Margin="0,5,0,0"> | |
| 71 | 新增: | |
| 72 | 新增: </list:BaseList> | |
| 73 | 新增: </StackPanel> | |
| 74 | 新增: <StackPanel x:Name="MonthSelect" Margin="10,0,0,0" Visibility="Collapsed"> | |
| 75 | 新增: <TextBlock Text="月份" HorizontalAlignment="Center"/> | |
| 76 | 新增: <list:BaseList x:Name="MonthsList" Height="120" Margin="0,5,0,0" HorizontalAlignment="Center"> | |
| 77 | 新增: | |
| 78 | 新增: </list:BaseList> | |
| 79 | 新增: </StackPanel> | |
| 80 | 新增: <!--</ScrollViewer>--> | |
| 81 | 新增: | |
| 82 | 新增: </StackPanel> | |
| 83 | 新增: | |
| 84 | 新增: </Grid> | |
| 85 | 新增: | |
| 86 | 新增: </Border> | |
| 87 | 新增: </Popup> | |
| 88 | 新增: </Grid> | |
| 16 | 89 | <Grid> |
| 17 | 90 | <Border Background="White" Padding="10" CornerRadius="10"> |
| 18 | 91 | <ScrollViewer x:Name="ScrollViewer" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Hidden"> |
| @@ -25,6 +98,41 @@ | ||
| 25 | 98 | </Border> |
| 26 | 99 | </Grid> |
| 27 | 100 | </StackPanel> |
| 101 | 新增: | |
| 102 | 新增: <VisualStateManager.VisualStateGroups> | |
| 103 | 新增: <VisualStateGroup x:Name="CommonStates"> | |
| 104 | 新增: <VisualStateGroup.Transitions> | |
| 105 | 新增: <VisualTransition GeneratedDuration="0:0:0.18" /> | |
| 106 | 新增: <VisualTransition GeneratedDuration="0" | |
| 107 | 新增: To="Pressed" /> | |
| 108 | 新增: </VisualStateGroup.Transitions> | |
| 109 | 新增: <VisualState x:Name="Normal" /> | |
| 110 | 新增: <VisualState x:Name="DateMouseOver"> | |
| 111 | 新增: <Storyboard> | |
| 112 | 新增: <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" | |
| 113 | 新增: Storyboard.TargetName="Date"> | |
| 114 | 新增: <EasingColorKeyFrame KeyTime="0" | |
| 115 | 新增: Value="#192B20D9" /> | |
| 116 | 新增: </ColorAnimationUsingKeyFrames> | |
| 117 | 新增: </Storyboard> | |
| 118 | 新增: </VisualState> | |
| 119 | 新增: <VisualState x:Name="ShowPopup"> | |
| 120 | 新增: <Storyboard> | |
| 121 | 新增: <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(base:Icon.RenderTransform).(RotateTransform.Angle)" | |
| 122 | 新增: Storyboard.TargetName="PopupIcon"> | |
| 123 | 新增: <EasingDoubleKeyFrame KeyTime="0" | |
| 124 | 新增: Value="-180" /> | |
| 125 | 新增: | |
| 126 | 新增: </DoubleAnimationUsingKeyFrames> | |
| 127 | 新增: <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(base:Icon.Foreground).(SolidColorBrush.Color)" | |
| 128 | 新增: Storyboard.TargetName="DateIcon"> | |
| 129 | 新增: <EasingColorKeyFrame KeyTime="0" | |
| 130 | 新增: Value="#2b20d9" /> | |
| 131 | 新增: </ColorAnimationUsingKeyFrames> | |
| 132 | 新增: </Storyboard> | |
| 133 | 新增: </VisualState> | |
| 134 | 新增: </VisualStateGroup> | |
| 135 | 新增: </VisualStateManager.VisualStateGroups> | |
| 28 | 136 | </Border> |
| 29 | 137 | <ControlTemplate.Triggers> |
| 30 | 138 | |

