|
337 | 337 | Return _Checked |
338 | 338 | End Get |
339 | 339 | Set(value As Boolean) |
340 | | - SetChecked(value, False, True) |
| 340 | + SetChecked(value, False, True, _Half) |
| 341 | + End Set |
| 342 | + End Property |
| 343 | + Private _Half As Boolean = False |
| 344 | + Public Property Half As Boolean |
| 345 | + Get |
| 346 | + Return _Half |
| 347 | + End Get |
| 348 | + Set(value As Boolean) |
| 349 | + SetChecked(_Checked, False, True, value) |
341 | 350 | End Set |
342 | 351 | End Property |
343 | 352 | ''' <summary> |
|
346 | 355 | ''' <param name="value">新的 Checked 属性。</param> |
347 | 356 | ''' <param name="user">是否由用户引发。</param> |
348 | 357 | ''' <param name="anime">是否执行动画。</param> |
349 | | - Public Sub SetChecked(value As Boolean, user As Boolean, anime As Boolean) |
| 358 | + ''' <param name="half">是否为部分选中。</param> |
| 359 | + Public Sub SetChecked(value As Boolean, user As Boolean, anime As Boolean, Optional half As Boolean = False) |
350 | 360 | Try |
351 | 361 |
|
352 | 362 | '自定义属性基础 |
|
364 | 374 | End If |
365 | 375 | _Checked = value |
366 | 376 | Else |
367 | | - If value = _Checked Then Exit Sub |
| 377 | + If value = _Checked AndAlso half = _Half Then Exit Sub |
368 | 378 | _Checked = value |
| 379 | + _Half = half |
369 | 380 | If IsInitialized Then |
370 | 381 | RaiseEvent Changed(Me, ChangedEventArgs) |
371 | 382 | If ChangedEventArgs.Handled Then |
|
429 | 440 | '由无变有 |
430 | 441 | If Not IsNothing(RectCheck) Then |
431 | 442 | Dim Delta = ActualHeight - RectCheck.ActualHeight - 12 |
432 | | - Anim.Add(AaHeight(RectCheck, Delta * 0.4, 200,, New AniEaseOutFluent(AniEasePower.Weak))) |
433 | | - Anim.Add(AaHeight(RectCheck, Delta * 0.6, 300,, New AniEaseOutBack(AniEasePower.Weak))) |
434 | | - Anim.Add(AaOpacity(RectCheck, 1 - RectCheck.Opacity, 30)) |
| 443 | + Anim.Add(AaHeight(RectCheck, Delta * If(half, 0.2, 0.4), 200,, New AniEaseOutFluent(AniEasePower.Weak))) |
| 444 | + Anim.Add(AaHeight(RectCheck, Delta * If(half, 0.3, 0.6), 300,, New AniEaseOutBack(AniEasePower.Weak))) |
| 445 | + Anim.Add(AaOpacity(RectCheck, If(half, 0.5, 1) - RectCheck.Opacity, 30)) |
435 | 446 | RectCheck.VerticalAlignment = VerticalAlignment.Center |
436 | 447 | RectCheck.Margin = New Thickness(-1, 0, 0, 0) |
437 | 448 | End If |
|
450 | 461 | Else |
451 | 462 | '不使用动画 |
452 | 463 | AniStop("MyListItem Checked " & Uuid) |
453 | | - If Checked Then |
| 464 | + |
| 465 | + If Checked OrElse half Then |
454 | 466 | If Not IsNothing(RectCheck) Then |
455 | 467 | RectCheck.Height = Double.NaN |
456 | 468 | RectCheck.Margin = New Thickness(-1, 6, 0, 6) |
457 | 469 | RectCheck.Opacity = 1 |
458 | 470 | RectCheck.VerticalAlignment = VerticalAlignment.Stretch |
| 471 | + If half Then |
| 472 | + RectCheck.Height = Height * 0.4 |
| 473 | + RectCheck.Opacity = 0.5 |
| 474 | + End If |
459 | 475 | End If |
460 | 476 | SetResourceReference(ForegroundProperty, If(Height < 40, "ColorBrush3", "ColorBrush2")) |
461 | 477 | Else |
|
0 commit comments