5
// Eric Maupin <ermau@xamarin.com>
7
// Copyright (c) 2012 Xamarin, Inc.
9
// Permission is hereby granted, free of charge, to any person obtaining a copy
10
// of this software and associated documentation files (the "Software"), to deal
11
// in the Software without restriction, including without limitation the rights
12
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
// copies of the Software, and to permit persons to whom the Software is
14
// furnished to do so, subject to the following conditions:
16
// The above copyright notice and this permission notice shall be included in
17
// all copies or substantial portions of the Software.
19
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
30
using System.Windows.Controls.Primitives;
31
using SWC = System.Windows.Controls;
33
namespace Xwt.WPFBackend
35
public class DropDownButton
36
: SWC.Primitives.ToggleButton, IWpfWidget
38
public DropDownButton()
43
public event EventHandler<MenuOpeningEventArgs> MenuOpening;
45
public WidgetBackend Backend
51
protected override System.Windows.Size MeasureOverride (System.Windows.Size constraint)
53
// HACK: This is a hack to fix a size calculation issue with buttons.
54
// For some reason, base.MeasureOverride doesn't return the correct size
55
// when using infinite,infinite as constraint, unless a previous call with
56
// concrete numbers has been made.
57
base.MeasureOverride (new System.Windows.Size (0, 0));
59
var s = base.MeasureOverride (constraint);
60
return Backend.MeasureOverride (constraint, s);
63
private void OnChecked (object sender, RoutedEventArgs routedEventArgs)
65
if (!IsChecked.HasValue || !IsChecked.Value)
68
var args = new MenuOpeningEventArgs ();
70
var opening = this.MenuOpening;
74
var menu = args.ContextMenu;
80
string text = Content as string;
81
if (!String.IsNullOrWhiteSpace (text)) {
82
SWC.MenuItem selected = menu.Items.OfType<SWC.MenuItem>().FirstOrDefault (i => i.Header as string == text);
84
selected.IsChecked = true;
87
menu.Closed += OnMenuClosed;
89
menu.PlacementTarget = this;
90
menu.Placement = PlacementMode.Bottom;
94
private void OnMenuClosed (object sender, RoutedEventArgs e)
96
var menu = sender as SWC.ContextMenu;
98
menu.Closed -= OnMenuClosed;
103
public class MenuOpeningEventArgs
106
public SWC.ContextMenu ContextMenu
b'\\ No newline at end of file'