문제

WPF 앱의 기본 메뉴가 IE8의 메인 메뉴처럼 작동하도록합니다.

  • 앱이 시작될 때 보이지 않습니다
  • ALT를 누르고 방출하면 가시적입니다
  • Alt를 다시 누르고 풀어 주면 다시 보이지 않습니다
  • 지루할 때까지 반복하십시오

어떻게 할 수 있습니까? 코드 여야합니까?

여전히 문제가 있기 때문에 제출 된 답변에 대한 응답으로 추가됩니다.

내 쉘 코드-홀드는 이제 다음과 같습니다.

public partial class Shell : Window
{
    public static readonly DependencyProperty IsMainMenuVisibleProperty;

    static Shell()
    {
        FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata();
        metadata.DefaultValue = false;

        IsMainMenuVisibleProperty = DependencyProperty.Register(
            "IsMainMenuVisible", typeof(bool), typeof(Shell), metadata);
    }

    public Shell()
    {
        InitializeComponent();

        this.PreviewKeyUp += new KeyEventHandler(Shell_PreviewKeyUp);
    }

    void Shell_PreviewKeyUp(object sender, KeyEventArgs e)
    {
        if (e.SystemKey == Key.LeftAlt || e.SystemKey == Key.RightAlt)
        {
            if (IsMainMenuVisible == true)
                IsMainMenuVisible = false;
            else
                IsMainMenuVisible = true;
        }
    }

    public bool IsMainMenuVisible
    {
        get { return (bool)GetValue(IsMainMenuVisibleProperty); }
        set { SetValue(IsMainMenuVisibleProperty, value); }
    }
}
도움이 되었습니까?

해결책

당신은 사용할 수 있습니다 PreviewKeyDown 창에서 이벤트. 감지합니다 대체 키 확인해야합니다 SystemKey 의 속성 KeyEventArgs, 대부분의 다른 키에 일반적으로 사용하는 키 속성과 반대로.

이 이벤트를 사용하여 a를 설정할 수 있습니다 bool a로 선언 된 값 DependencyProperty 뒤에있는 Windows 코드에서.

메뉴 Visibility 그런 다음 속성은 BooleanToVisibilityConverter.

<Menu 
    Visibility={Binding Path=IsMenuVisibile, 
        RelativeSource={RelativeSource AncestorType=Window},
        Converter={StaticResource BooleanToVisibilityConverter}}
    />

다른 팁

나는 처리를 시도 할 것이다 PreviewKeyDown 창에서 이벤트. Alt를 누르면이 이벤트를 트리거하는지 확실하지 않지만 그렇다면 그렇다면 A를 토글합니다. bool 창의 기본 메뉴의 가시성에 묶여 있습니다.

만약에 PreviewKeyDown 작동하지 않습니다. 또 무엇을 시도 해야할지 잘 모르겠습니다. 창으로 전송 된 실제 Windows 메시지를 살펴볼 수 있지만 매우 빨리 지저분해질 수 있습니다.

사용하는 것이 좋습니다 GetKeyboardState ~와 함께 VK_MENU 왼쪽과 오른쪽을 모두 처리합니다 대체, IE / Windows Explorer (Vista+)의 동작을 모방하려면 이전에 중점을 둔 요소를 추적하려면 초점을 저장해야합니다. VK_MENU 집중 요소가 메인 메뉴 내에있는 동안 누릅니다. 당신은 또한이 일을하고 싶습니다 PreviewKeyUp (다운 아님).

나는 방금이 문제를 직접 발견했다. 나는 PreviewKeyDown 이벤트이지만 신뢰할 수없는 것으로 나타났습니다. 대신에 나는 찾았다 InputManager 당신이 당신이 연결할 수있는 수업 EnterMenuMode 관리 코드에서. 관리자는 Enter and Exit을 위해 두 가지 이벤트를 노출시킵니다. 트릭은 메뉴를 무너 뜨리지 않지만 숨겨 질 때 컨테이너 높이를 0으로 설정하는 것입니다. 그것을 보여주기 위해서는 단순히 로컬 값을 지우면 이전 높이가 필요합니다.

TopMenu 사용자 제어 :

public TopMenu()
{
    InitializeComponent();
    InputManager.Current.EnterMenuMode += OnEnterMenuMode;
    InputManager.Current.LeaveMenuMode += OnLeaveMenuMode;
    Height = 0;
}

private void OnLeaveMenuMode(object sender, System.EventArgs e)
{
    Height = 0;
}

private void OnEnterMenuMode(object sender, System.EventArgs e)
{
    ClearValue(HeightProperty);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top