DropDownMenu.cs
上传用户:huazai0421
上传日期:2008-05-30
资源大小:405k
文件大小:2k
源码类别:

SilverLight

开发平台:

C#

  1. using System.Windows;
  2. using System.Windows.Controls;
  3. using System.Windows.Input;
  4. using System.Windows.Markup;
  5. using System.Windows.Media;
  6. namespace ESRI.ArcGIS.Samples
  7. {
  8. /// <summary>
  9. /// Resizable and draggable custom window control
  10. /// </summary>
  11. [ContentProperty("Content")]
  12. public class DropDownMenu : ContentControl
  13. {
  14. private DropDownMenuWindow popup;
  15. public DropDownMenu()
  16. {
  17. DefaultStyleKey = typeof(DropDownMenu);
  18. this.MouseEnter += DropDownMenu_MouseEnter;
  19. this.MouseLeave += DropDownMenu_MouseLeave;
  20. }
  21. private void HideMenu()
  22. {
  23. if (popup != null)
  24. {
  25. popup.IsVisible = false;
  26. }
  27. }
  28. private void ShowMenu()
  29. {
  30. if (popup != null)
  31. {
  32. popup.IsVisible = true;
  33. }
  34. }
  35. private void DropDownMenu_MouseEnter(object sender, MouseEventArgs e)
  36. {
  37. ShowMenu();
  38. }
  39. private void DropDownMenu_MouseLeave(object sender, MouseEventArgs e)
  40. {
  41. HideMenu();
  42. }
  43. /// <summary>
  44. /// When overridden in a derived class, is invoked whenever application code or
  45. /// internal processes (such as a rebuilding layout pass) call
  46. /// <see cref="M:System.Windows.Controls.Control.ApplyTemplate"/>.
  47. /// </summary>
  48. public override void OnApplyTemplate()
  49. {
  50. base.OnApplyTemplate();
  51. popup = GetTemplateChild("Menu") as DropDownMenuWindow;
  52. if (popup != null)
  53. {
  54. (popup.Content as UIElement).MouseEnter += DropDownMenu_MouseEnter;
  55. (popup.Content as UIElement).MouseLeave += DropDownMenu_MouseLeave;
  56. }
  57. }
  58. protected override Size MeasureOverride(Size availableSize)
  59. {
  60. Size s = base.MeasureOverride(availableSize);
  61. if (popup != null)
  62. {
  63. GeneralTransform t = this.TransformToVisual(Application.Current.RootVisual);
  64. Point p = t.Transform(new Point(0, s.Height));
  65. popup.HorizontalOffset = p.X;
  66. popup.VerticalOffset = p.Y;
  67. }
  68. return s;
  69. }
  70. /// <summary>
  71. /// Identifies the <see cref="MenuContent"/> dependency property.
  72. /// </summary>
  73. public static readonly DependencyProperty MenuContentProperty =
  74. DependencyProperty.Register("MenuContent", typeof(object), typeof(DropDownMenu),null);
  75. /// <summary>
  76. /// Gets or sets MenuContent.
  77. /// </summary>
  78. public object MenuContent
  79. {
  80. get { return (object)GetValue(MenuContentProperty); }
  81. set { SetValue(MenuContentProperty, value); }
  82. }
  83. }
  84. }