2010-12-10 5 views
0

일정 시간 (초) 후에 메뉴 클래스가 자동 숨기기를 허용하는 간단한 속성이 있습니까? MSDN을 검색했지만 적합한 속성을 찾을 수 없습니다.Menu (WPF) 자동 숨기기

답변

2

기본적으로 메뉴는이를 지원하지 않지만 약간의 수정으로이 동작을 쉽게 구현할 수 있습니다. 예를 들어

: 3 초 후이 메뉴를 닫습니다 어떤

  <local:AutoHideMenuItem Header="File" AutoHideDelay="3"> 
       <MenuItem Header="New"></MenuItem> 
       <MenuItem Header="Open"></MenuItem> 
       <MenuItem Header="Close"></MenuItem> 
       <MenuItem Header="Exit"></MenuItem> 
      </local:AutoHideMenuItem> 

:

public class AutoHideMenuItem : MenuItem 
{ 
    DispatcherTimer timer; 

    private Int32 _autoHideDelay; 
    public Int32 AutoHideDelay 
    { 
     get 
     { 
      return _autoHideDelay; 
     } 
     set 
     { 
      _autoHideDelay = value; 
      timer.Interval = TimeSpan.FromSeconds(AutoHideDelay); 
     } 
    } 

    public AutoHideMenuItem() 
    { 
     MouseMove += new MouseEventHandler(AutoHideMenuItem_MouseMove); 
     ContextMenuOpening += new ContextMenuEventHandler(AutoHideMenuItem_ContextMenuOpening); 
     SubmenuClosed += new RoutedEventHandler(AutoHideMenuItem_SubmenuClosed); 

     timer = new DispatcherTimer(DispatcherPriority.Normal, Dispatcher); 
     timer.Interval = TimeSpan.FromSeconds(AutoHideDelay); 
     timer.Stop(); 

     timer.Tick += new EventHandler(timer_Tick); 
    } 

    void timer_Tick(object sender, EventArgs e) 
    { 
     if (IsSubmenuOpen && !IsMouseOver) 
     { 
      IsSubmenuOpen = false; 
     } 
    } 

    void AutoHideMenuItem_MouseMove(object sender, MouseEventArgs e) 
    { 
     timer.Stop(); 
     timer.Start(); 
    } 

    void AutoHideMenuItem_ContextMenuOpening(object sender, ContextMenuEventArgs e) 
    { 
     timer.Start(); 
    } 

    void AutoHideMenuItem_SubmenuClosed(object sender, RoutedEventArgs e) 
    { 
     timer.Stop(); 
    } 
} 

는 같은 기능을 수행합니다. 물론 대략적인 코드와 시나리오에 맞게 변경해야합니다.