Browse Source

Fix dropdown open/close behavior.

Now that new eventing stuff is in place.

Also fix bug with AddClassHandler where it was triyng to call every
object irregardless of whether it was the correct type.
pull/39/head
Steven Kirk 11 years ago
parent
commit
ab916df3dc
  1. 5
      Perspex.Controls/Button.cs
  2. 5
      Perspex.Controls/DropDown.cs
  3. 3
      Perspex.Controls/Popup.cs
  4. 3
      Perspex.Controls/Primitives/ToggleButton.cs
  5. 17
      Perspex.Interactivity/RoutedEvent.cs

5
Perspex.Controls/Button.cs

@ -27,6 +27,7 @@ namespace Perspex.Controls
static Button()
{
FocusableProperty.OverrideDefaultValue(typeof(Button), true);
ClickEvent.AddClassHandler<Button>(x => x.OnClick);
}
public event EventHandler<RoutedEventArgs> Click
@ -51,7 +52,7 @@ namespace Perspex.Controls
return base.ArrangeOverride(finalSize);
}
protected virtual void OnClick()
protected virtual void OnClick(RoutedEventArgs e)
{
}
@ -85,8 +86,6 @@ namespace Perspex.Controls
private void RaiseClickEvent()
{
this.OnClick();
RoutedEventArgs click = new RoutedEventArgs
{
RoutedEvent = ClickEvent,

5
Perspex.Controls/DropDown.cs

@ -67,7 +67,10 @@ namespace Perspex.Controls
protected override void OnPointerPressed(PointerPressEventArgs e)
{
this.IsDropDownOpen = !this.IsDropDownOpen;
if (!this.IsDropDownOpen)
{
this.IsDropDownOpen = true;
}
}
protected override void OnTemplateApplied()

3
Perspex.Controls/Popup.cs

@ -91,9 +91,8 @@ namespace Perspex.Controls
}
this.popupRoot.SetPosition(this.GetPosition());
this.popupRoot.PointerPressed += this.MaybeClose;
this.topLevel.Deactivated += this.MaybeClose;
this.popupRoot.AddHandler(PopupRoot.PointerPressedEvent, this.MaybeClose, RoutingStrategies.Bubble, true);
this.topLevel.AddHandler(TopLevel.PointerPressedEvent, this.MaybeClose, RoutingStrategies.Tunnel);
this.popupRoot.Show();

3
Perspex.Controls/Primitives/ToggleButton.cs

@ -7,6 +7,7 @@
namespace Perspex.Controls.Primitives
{
using System;
using Perspex.Interactivity;
public class ToggleButton : Button
{
@ -28,7 +29,7 @@ namespace Perspex.Controls.Primitives
set { this.SetValue(IsCheckedProperty, value); }
}
protected override void OnClick()
protected override void OnClick(RoutedEventArgs e)
{
this.Toggle();
}

17
Perspex.Interactivity/RoutedEvent.cs

@ -133,8 +133,21 @@ namespace Perspex.Interactivity
RoutingStrategies routes = RoutingStrategies.Direct | RoutingStrategies.Bubble)
where TTarget : class
{
var adaptor = (EventHandler<RoutedEventArgs>)((s, e) => handler((TTarget)s)((TEventArgs)e));
this.AddClassHandler(typeof(TTarget), adaptor, routes);
this.AddClassHandler(typeof(TTarget), (s, e) => ClassHandlerAdapter<TTarget>(s, e, handler), routes);
}
private static void ClassHandlerAdapter<TTarget>(
object sender,
RoutedEventArgs e,
Func<TTarget, Action<TEventArgs>> handler) where TTarget : class
{
var target = sender as TTarget;
var args = e as TEventArgs;
if (target != null && args != null)
{
handler(target)(args);
}
}
}
}

Loading…
Cancel
Save