mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.2 KiB
60 lines
2.2 KiB
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) |
|
|
|
using System; |
|
using System.Windows; |
|
using System.Windows.Controls; |
|
using System.Windows.Controls.Primitives; |
|
using System.Windows.Input; |
|
|
|
namespace ICSharpCode.AvalonEdit.Search |
|
{ |
|
/// <summary> |
|
/// A button that opens a drop-down menu when clicked. |
|
/// </summary> |
|
class DropDownButton : ButtonBase |
|
{ |
|
public static readonly DependencyProperty DropDownContentProperty |
|
= DependencyProperty.Register("DropDownContent", typeof(Popup), |
|
typeof(DropDownButton), new FrameworkPropertyMetadata(null)); |
|
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] |
|
protected static readonly DependencyPropertyKey IsDropDownContentOpenPropertyKey |
|
= DependencyProperty.RegisterReadOnly("IsDropDownContentOpen", typeof(bool), |
|
typeof(DropDownButton), new FrameworkPropertyMetadata(false)); |
|
|
|
public static readonly DependencyProperty IsDropDownContentOpenProperty = IsDropDownContentOpenPropertyKey.DependencyProperty; |
|
|
|
static DropDownButton() |
|
{ |
|
DefaultStyleKeyProperty.OverrideMetadata(typeof(DropDownButton), new FrameworkPropertyMetadata(typeof(DropDownButton))); |
|
} |
|
|
|
public Popup DropDownContent { |
|
get { return (Popup)GetValue(DropDownContentProperty); } |
|
set { SetValue(DropDownContentProperty, value); } |
|
} |
|
|
|
public bool IsDropDownContentOpen { |
|
get { return (bool)GetValue(IsDropDownContentOpenProperty); } |
|
protected set { SetValue(IsDropDownContentOpenPropertyKey, value); } |
|
} |
|
|
|
protected override void OnClick() |
|
{ |
|
if (DropDownContent != null && !IsDropDownContentOpen) { |
|
DropDownContent.Placement = PlacementMode.Bottom; |
|
DropDownContent.PlacementTarget = this; |
|
DropDownContent.IsOpen = true; |
|
DropDownContent.Closed += DropDownContent_Closed; |
|
this.IsDropDownContentOpen = true; |
|
} |
|
} |
|
|
|
void DropDownContent_Closed(object sender, EventArgs e) |
|
{ |
|
((Popup)sender).Closed -= DropDownContent_Closed; |
|
this.IsDropDownContentOpen = false; |
|
} |
|
} |
|
}
|
|
|