Browse Source

Make dropdown open with a click anywhere....

...on its surface.
pull/39/head
Steven Kirk 11 years ago
parent
commit
e16444b33e
  1. 24
      Perspex.Controls/Button.cs
  2. 6
      Perspex.Controls/DropDown.cs
  3. 8
      Perspex.Controls/Popup.cs
  4. 1
      Perspex.Themes.Default/DropDownStyle.cs

24
Perspex.Controls/Button.cs

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

6
Perspex.Controls/DropDown.cs

@ -11,6 +11,7 @@ namespace Perspex.Controls
using Perspex.Controls.Presenters;
using Perspex.Controls.Primitives;
using Perspex.Controls.Templates;
using Perspex.Input;
using Perspex.Layout;
public class DropDown : SelectingItemsControl, IContentControl, ILogical
@ -64,6 +65,11 @@ namespace Perspex.Controls
get { return this.logicalChildren; }
}
protected override void OnPointerPressed(PointerPressEventArgs e)
{
this.IsDropDownOpen = !this.IsDropDownOpen;
}
protected override void OnTemplateApplied()
{
var container = this.GetTemplateChild<Panel>("container");

8
Perspex.Controls/Popup.cs

@ -7,6 +7,7 @@
namespace Perspex.Controls
{
using System;
using Perspex.Interactivity;
using Perspex.Platform;
using Perspex.Rendering;
@ -142,6 +143,13 @@ namespace Perspex.Controls
{
if (!this.StaysOpen)
{
var routed = e as RoutedEventArgs;
if (routed != null)
{
routed.Handled = true;
}
this.Close();
}
}

1
Perspex.Themes.Default/DropDownStyle.cs

@ -73,6 +73,7 @@ namespace Perspex.Themes.Default
Id = "toggle",
BorderThickness = 0,
Background = Brushes.Transparent,
ClickMode = ClickMode.Press,
Content = new Path
{
Id = "checkMark",

Loading…
Cancel
Save