|
|
@ -10,8 +10,17 @@ namespace Perspex.Controls |
|
|
using Perspex.Input; |
|
|
using Perspex.Input; |
|
|
using Perspex.Interactivity; |
|
|
using Perspex.Interactivity; |
|
|
|
|
|
|
|
|
|
|
|
public enum ClickMode |
|
|
|
|
|
{ |
|
|
|
|
|
Release, |
|
|
|
|
|
Press, |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
public class Button : ContentControl |
|
|
public class Button : ContentControl |
|
|
{ |
|
|
{ |
|
|
|
|
|
public static readonly PerspexProperty<ClickMode> ClickModeProperty = |
|
|
|
|
|
PerspexProperty.Register<Button, ClickMode>("ClickMode"); |
|
|
|
|
|
|
|
|
public static readonly RoutedEvent<RoutedEventArgs> ClickEvent = |
|
|
public static readonly RoutedEvent<RoutedEventArgs> ClickEvent = |
|
|
RoutedEvent.Register<Button, RoutedEventArgs>("Click", RoutingStrategy.Bubble); |
|
|
RoutedEvent.Register<Button, RoutedEventArgs>("Click", RoutingStrategy.Bubble); |
|
|
|
|
|
|
|
|
@ -26,6 +35,12 @@ namespace Perspex.Controls |
|
|
remove { this.RemoveHandler(ClickEvent, value); } |
|
|
remove { this.RemoveHandler(ClickEvent, value); } |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public ClickMode ClickMode |
|
|
|
|
|
{ |
|
|
|
|
|
get { return this.GetValue(ClickModeProperty); } |
|
|
|
|
|
set { this.SetValue(ClickModeProperty, value); } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
protected override Size MeasureOverride(Size availableSize) |
|
|
protected override Size MeasureOverride(Size availableSize) |
|
|
{ |
|
|
{ |
|
|
return base.MeasureOverride(availableSize); |
|
|
return base.MeasureOverride(availableSize); |
|
|
@ -46,6 +61,12 @@ namespace Perspex.Controls |
|
|
|
|
|
|
|
|
this.Classes.Add(":pressed"); |
|
|
this.Classes.Add(":pressed"); |
|
|
e.Device.Capture(this); |
|
|
e.Device.Capture(this); |
|
|
|
|
|
e.Handled = true; |
|
|
|
|
|
|
|
|
|
|
|
if (this.ClickMode == ClickMode.Press) |
|
|
|
|
|
{ |
|
|
|
|
|
this.RaiseClickEvent(); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
protected override void OnPointerReleased(PointerEventArgs e) |
|
|
protected override void OnPointerReleased(PointerEventArgs e) |
|
|
@ -54,8 +75,9 @@ namespace Perspex.Controls |
|
|
|
|
|
|
|
|
e.Device.Capture(null); |
|
|
e.Device.Capture(null); |
|
|
this.Classes.Remove(":pressed"); |
|
|
this.Classes.Remove(":pressed"); |
|
|
|
|
|
e.Handled = true; |
|
|
|
|
|
|
|
|
if (this.Classes.Contains(":pointerover")) |
|
|
if (this.ClickMode == ClickMode.Release && this.Classes.Contains(":pointerover")) |
|
|
{ |
|
|
{ |
|
|
this.RaiseClickEvent(); |
|
|
this.RaiseClickEvent(); |
|
|
} |
|
|
} |
|
|
|