Browse Source

Fix DropDown dropping down.

Make clicking on an open DropDown close it, and wire up the ToggleButon.
pull/390/head
Steven Kirk 10 years ago
parent
commit
2b09f5f6d1
  1. 18
      src/Perspex.Controls/DropDown.cs
  2. 1
      src/Perspex.Controls/Primitives/Popup.cs
  3. 1
      src/Perspex.Themes.Default/DropDown.paml

18
src/Perspex.Controls/DropDown.cs

@ -36,6 +36,7 @@ namespace Perspex.Controls
private bool _isDropDownOpen;
private Popup _popup;
private bool _closing;
static DropDown()
{
@ -111,15 +112,14 @@ namespace Perspex.Controls
protected override void OnPointerPressed(PointerPressEventArgs e)
{
if (!IsDropDownOpen)
if (!IsDropDownOpen && !_closing && ((IVisual)e.Source).GetVisualRoot() != typeof(PopupRoot))
{
if (((IVisual)e.Source).GetVisualAncestors().Last().GetType() != typeof(PopupRoot))
{
IsDropDownOpen = true;
e.Handled = true;
}
IsDropDownOpen = true;
e.Handled = true;
}
_closing = false;
if (!e.Handled)
{
if (UpdateSelectionFromEventSource(e.Source))
@ -140,6 +140,7 @@ namespace Perspex.Controls
_popup = e.NameScope.Get<Popup>("PART_Popup");
_popup.Opened += PopupOpened;
_popup.Closed += PopupClosed;
}
private void PopupOpened(object sender, EventArgs e)
@ -153,6 +154,11 @@ namespace Perspex.Controls
}
}
private void PopupClosed(object sender, EventArgs e)
{
_closing = true;
}
private void SelectedItemChanged(PerspexPropertyChangedEventArgs e)
{
UpdateSelectionBoxItem(e.NewValue);

1
src/Perspex.Controls/Primitives/Popup.cs

@ -59,6 +59,7 @@ namespace Perspex.Controls.Primitives
/// </summary>
static Popup()
{
IsHitTestVisibleProperty.OverrideDefaultValue<Popup>(false);
ChildProperty.Changed.AddClassHandler<Popup>(x => x.ChildChanged);
IsOpenProperty.Changed.AddClassHandler<Popup>(x => x.IsOpenChanged);
}

1
src/Perspex.Themes.Default/DropDown.paml

@ -20,6 +20,7 @@
Background="Transparent"
ClickMode="Press"
Focusable="False"
IsChecked="{TemplateBinding IsDropDownOpen, Mode=TwoWay}"
Grid.Column="1">
<Path Fill="Black"
Width="8"

Loading…
Cancel
Save