Free cookie consent management tool by TermsFeed Policy Generator

source: branches/2925_AutoDiffForDynamicalModels/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/AvalonEdit-5.0.1/Search/DropDownButton.cs

Last change on this file was 11700, checked in by jkarder, 10 years ago

#2077: created branch and added first version

File size: 3.6 KB
Line 
1// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
2//
3// Permission is hereby granted, free of charge, to any person obtaining a copy of this
4// software and associated documentation files (the "Software"), to deal in the Software
5// without restriction, including without limitation the rights to use, copy, modify, merge,
6// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
7// to whom the Software is furnished to do so, subject to the following conditions:
8//
9// The above copyright notice and this permission notice shall be included in all copies or
10// substantial portions of the Software.
11//
12// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
13// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
15// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17// DEALINGS IN THE SOFTWARE.
18
19using System;
20using System.Windows;
21using System.Windows.Controls.Primitives;
22
23namespace ICSharpCode.AvalonEdit.Search
24{
25  /// <summary>
26  /// A button that opens a drop-down menu when clicked.
27  /// </summary>
28  public class DropDownButton : ButtonBase
29  {
30    /// <summary>
31    /// Identifies the <see cref="DropDownContentProperty" /> dependency property.
32    /// </summary>
33    public static readonly DependencyProperty DropDownContentProperty
34    = DependencyProperty.Register("DropDownContent", typeof(Popup),
35      typeof(DropDownButton), new FrameworkPropertyMetadata(null));
36   
37    /// <summary>
38    /// The key that identifies the <see cref="IsDropDownContentOpenProperty" /> dependency property.
39    /// </summary>
40    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")]
41    protected static readonly DependencyPropertyKey IsDropDownContentOpenPropertyKey
42    = DependencyProperty.RegisterReadOnly("IsDropDownContentOpen", typeof(bool),
43      typeof(DropDownButton), new FrameworkPropertyMetadata(false));
44   
45    /// <summary>
46    /// Identifies the <see cref="IsDropDownContentOpenProperty" /> dependency property.
47    /// </summary>
48    public static readonly DependencyProperty IsDropDownContentOpenProperty = IsDropDownContentOpenPropertyKey.DependencyProperty;
49   
50    static DropDownButton()
51    {
52      DefaultStyleKeyProperty.OverrideMetadata(typeof(DropDownButton), new FrameworkPropertyMetadata(typeof(DropDownButton)));
53    }
54   
55    /// <summary>
56    /// Gets/Sets the popup that is used as drop-down content.
57    /// </summary>
58    public Popup DropDownContent {
59      get { return (Popup)GetValue(DropDownContentProperty); }
60      set { SetValue(DropDownContentProperty, value); }
61    }
62   
63    /// <summary>
64    /// Gets whether the drop-down is opened.
65    /// </summary>
66    public bool IsDropDownContentOpen {
67      get { return (bool)GetValue(IsDropDownContentOpenProperty); }
68      protected set { SetValue(IsDropDownContentOpenPropertyKey, value); }
69    }
70   
71    /// <inheritdoc/>
72    protected override void OnClick()
73    {
74      if (DropDownContent != null && !IsDropDownContentOpen) {
75        DropDownContent.Placement = PlacementMode.Bottom;
76        DropDownContent.PlacementTarget = this;
77        DropDownContent.IsOpen = true;
78        DropDownContent.Closed += DropDownContent_Closed;
79        this.IsDropDownContentOpen = true;
80      }
81    }
82   
83    void DropDownContent_Closed(object sender, EventArgs e)
84    {
85      ((Popup)sender).Closed -= DropDownContent_Closed;
86      this.IsDropDownContentOpen = false;
87    }
88  }
89}
Note: See TracBrowser for help on using the repository browser.