C\#WPF 에서 경계선 없 는 로그 인 창 을 만 드 는 예제

앞에서 말 했 듯 이 필 자 는 최근 에 c\#로 WPF 를 써 서 프로젝트 를 만 들 었 다.이전에 완전한 WPF 프로젝트 를 한 적 이 없 는데 배 우 며 사용 한 셈 이다.인터넷 에서 많은 자 료 를 찾 았 는데 효율 은 당연히 칭찬 하지 못 한다.가끔 은 간단 한 문제 에 대해 오랫동안 고민 하고 피 와 눈물 의 교훈 이 적지 않다.
하지만 드라마 한 차 트 의 한 마디 처럼 내 가 살아 남 았 으 니 헛되이 살 지 는 않 았 을 것 이다!필 자 는 아무리 발 버 둥 쳐 도 경험 과 교훈 을 나 눌 수 있 고 기억 에 남 을 때 정리 해서 썼 다.후발 주자 들 이 시행 착 오 를 줄 이 고 업무 효율 을 높이 기 를 바란다.만약 잘 쓰 지 못 한 부분 이 있다 면 독자 가 지적 하고 함께 진보 할 수 있 기 를 바 랍 니 다!
---------------------------------
오늘 은 로그 인 창 부터 말씀 드 리 겠 습 니 다.
1.효과 도
먼저 효과 도 를 살 펴 보 자.간결 하고 스타일 이 통일 되 어 Window 운영 체제 주제 에 전혀 영향 을 받 지 않 는 다.

2.실현 방법
WPF 에서 이러한 창 을 만 드 는 것 은 매우 간단 합 니 다.창 디자인 에 두 개의 속성 만 설정 해 야 합 니 다.하 나 는 AllowsTransparency 이 고 Ture 로 설정 합 니 다. 하 나 는 Window Style 이 고 None 으로 설정 되 어 있 습 니 다.

주:Window 의 속성 입 니 다.다른 컨트롤 을 선택 하지 마 십시오.
또한 AllowsTransparency="True"라면 WindowStyle 은 None 일 수 밖 에 없고 VS 2015 는 연동 설정 을 했 으 며 AllowsTransparency 를 선택 하면 다음 도 달라 집 니 다.그러나 VS 2008 은 사용자 가 각각 설정 해 야 합 니 다.그렇지 않 으 면 잘못 보고 할 수 있 습 니 다.
또 하나의 문 제 는 AllowsTransparency="True"이후 윈도 우즈 FormsHost 컨트롤 을 사용 할 수 없습니다.사용 하 더 라 도 WFH 의 모든 컨트롤 은 투명 해서 표시 할 수 없습니다.예 를 들 어 ReportViewer!
3.창 임의의 빈 공간 에서 마우스 드래그
제목 표시 줄 에 최소 화 와 닫 기 단 추 를 최대 화 합 니 다.로그 인 창 에 서 는 최대 화 단 추 를 사용 하지 않 습 니 다.그러나 제목 표시 줄 은 창 전 체 를 끌 어 당 길 수 있 는 실 용적 인 역할 이 있 습 니 다.사용 자 는 제목 표시 줄 을 누 르 기만 하면 데스크 톱 어디 든 끌 어 당 길 수 있 습 니 다.이제 제목 표시 줄 을 숨 긴 후에 어떻게 보완 해 야 합 니까?
창 에 추가 Mouse Left Button Down 의 이벤트,코드 는 다음 과 같 습 니 다.

private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
      try
      {
        this.DragMove();
      }
      catch { }
    }
이렇게 하면 OK!
주:인터넷 의 일부 예제 에 서 는 try{}catch{}을 사용 하지 않 고 코드 가 한 줄 밖 에 없습니다.

this.DragMove();
로그 인 창 에 몇 개의 컨트롤 과 이벤트 만 있다 면 큰 문제 가 없 을 것 입 니 다.
여기 서 필 자 는 작은 경험 을 공유 해 야 한다.
메 인 화면 에서 도 이러한 제목 표시 줄 이 없 는 창 을 사 용 했 기 때문에 마우스 가 Gridview 에서 작 동 할 때 이상 한 붕 괴 를 일 으 킬 수 있 습 니 다.
그래서 필 자 는 더 하 는 게 좋 을 것 같 아 요. try..catch..이상 을 피하 세 요.로그 인 창 이라도 예외 가 아 닙 니 다.
4.비밀 번 호 를 입력 하고 Enter 를 눌 러 로그 인
많은 사이트 들 이 이러한 상황 에 주의 하고 비밀 번 호 를 입력 한 후에 차 로 돌아 가면 시스템 이 로그 인 할 수 있 는데 이것 이 바로 좋 은 사용자 체험 이다.물론 사용자 체험 에 주의 하지 않 는 사이트 도 있 습 니 다.사용 자 는 마 우 스 를 클릭 하여 로그 인 해 야 합 니 다)
사실 암호 상자 에 KeyDown 이 벤트 를 추가 하면 됩 니 다.

private void txt_Pwd_KeyDown(object sender, KeyEventArgs e)
    {
      switch (e.Key)
      {
        case Key.Enter:
          btn_login_Click(btn_login, null);
          break;

        default:
          break;
      }
    }
So easy !
5. Enter(Enter)를 누 르 면 다음 컨트롤 로 이동 합 니 다.
리 턴 로그 인 을 언급 하 는 김 에 어떤 사람들 은 사용자 이름 을 입력 하 는 것 을 좋아 하지 않 은 후에 마우스 로 비밀번호 상자 로 옮 기 고 키보드 와 마우스,예 를 들 어 필자 등 이다.
사실 Tab 키 는 사용자 가 비교적 간단 한 인터페이스 에서 마 우 스 를 벗 어 날 수 있 지만 창 디자인 시 컨트롤 을 잘 조절 하 는 것 에 주의해 야 합 니 다. TabIndex 순서.
물론 이 를 바탕 으로 엔 터 설정 기능 도 추가 할 수 있 습 니 다.배경 코드 로 창 을 다시 쓰기 만 하면 됩 니 다. OnKeyDown 이벤트,다음 과 같 습 니 다:

//            
    protected override void OnKeyDown(KeyEventArgs e)
    {
      if (e.Key == Key.Enter)
      {
        // MoveFocus takes a TraveralReqest as its argument.
        TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);

        // Gets the element with keyboard focus.
        UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;

        // Change keyboard focus.
        if (elementWithFocus != null)
        {
          elementWithFocus.MoveFocus(request);
        }
        e.Handled = true;
      }
      base.OnKeyDown(e);
    }
6.실행 중 로그 인 창 열기
로그 인 창 은 주 창 이 아니 기 때문에 로그 인 후 닫 아야 하기 때문에 Startup 의 경 로 는 로그 인 창 이 아니 지만 로그 인 할 때 주 창 을 열 수 없습니다.사용자 가 로그 인 창 을 닫 으 면 프로그램 을 종료 합 니 다.
실현 방법:
프로젝트 다음 에 App.xaml 파일 이 있 습 니 다.Startup 은 주 창의 경 로 를 가리 키 고 배경 코드 App.xaml.cs 를 열 어 OnStartup 이 벤트 를 다시 쓰 고 로그 인 창의 DialogResult 가 ture 로 돌아 오 면 주 창 을 정상적으로 열 고 false 이면 프로그램 전 체 를 닫 습 니 다.코드:

//      ,        
    protected override void OnStartup(StartupEventArgs e)
    {
      try
      {
        OneInstanceOnly();//       
//#if !DEBUG
        //       
        Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;
        LoginWindow window = new LoginWindow();
        bool? dialogResult = window.ShowDialog();
        if (Utils.IsTrue(dialogResult))
        {
          base.OnStartup(e);
          Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
        }
        else
        {
          this.Shutdown();
        }
//#endif
      }
      catch (Exception ex)
      {
        UIUtils.ShowException(ex);
      }
    }
주의한다 Shutdown Mode 의 변화
저자:목석 비 키
출처:http://www.cnblogs.com/EasyInvoice
이상 은 C\#WPF 가 경계선 없 는 로그 인 창 을 만 드 는 예제 입 니 다.c\#WPF 창 을 만 드 는 데 관 한 자 료 는 다른 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기