0
일정 시간 (초) 후에 메뉴 클래스가 자동 숨기기를 허용하는 간단한 속성이 있습니까? MSDN을 검색했지만 적합한 속성을 찾을 수 없습니다.Menu (WPF) 자동 숨기기
일정 시간 (초) 후에 메뉴 클래스가 자동 숨기기를 허용하는 간단한 속성이 있습니까? MSDN을 검색했지만 적합한 속성을 찾을 수 없습니다.Menu (WPF) 자동 숨기기
기본적으로 메뉴는이를 지원하지 않지만 약간의 수정으로이 동작을 쉽게 구현할 수 있습니다. 예를 들어
: 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();
}
}
는 같은 기능을 수행합니다. 물론 대략적인 코드와 시나리오에 맞게 변경해야합니다.