2011-02-08 16 views
9

기본적으로 WPF 창을 전체 화면 모드로 설정하려면 F11 키를 누르거나 창의 오른쪽 상단 모서리에있는 최대화 단추를 누르십시오.WPF 전체 화면 최대화

눌러 F11에 대한 매력처럼 다음 작품하는 동안 :

private void Window_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.F11) 
    { 
     WindowStyle = WindowStyle.None; 
     WindowState = WindowState.Maximized; 
     ResizeMode = ResizeMode.NoResize; 
    } 
} 

이 여전히 Windows 작업 표시 줄을 표시합니다 (윈도우 7 테스트는) :

protected override void OnStateChanged(EventArgs e) 
{ 
    if (WindowState == WindowState.Maximized) 
    { 
     WindowStyle = WindowStyle.None; 
     WindowState = WindowState.Maximized; 
     ResizeMode = ResizeMode.NoResize; 
    } 
    base.OnStateChanged(e); 
} 

내가 무슨 말이냐? 아니면 내가 더 우아하게 할 수 있을까?

답변

18

WPF는 결정을 abo로 만드는 것 같습니다. 최대화 할 때 WindowStyle을 기반으로 전체 화면으로 이동하거나 작업 표시 줄을 존중할지 여부를 결정합니다. 그래서 미봉책하지만 효과적인 솔루션이 아닌 최대의 WindowStyle 설정으로 다시 창을 전환 한 다음 다시 최대화에 창을 설정하는 것입니다 : 코드가 분명 추한

private bool _inStateChange; 

protected override void OnStateChanged(EventArgs e) 
{ 
    if (WindowState == WindowState.Maximized && !_inStateChange) 
    { 
    _inStateChange = true; 
    WindowState = WindowState.Normal; 
    WindowStyle = WindowStyle.None; 
    WindowState = WindowState.Maximized; 
    ResizeMode = ResizeMode.NoResize; 
    _inStateChange = false; 
    } 
    base.OnStateChanged(e); 
} 

있지만 정상으로의 전환과 최대화로 돌아 가면 사용자 경험이 악화되는 것 같지 않습니다. 디스플레이에서 F11 코드와 kludge를 모두 사용하여 깜박임을 확인할 수 있었지만 kludge를 극대화하지는 못했습니다. 그러나 귀하의 마일리지는 다를 수 있습니다!

+5

* 노크 노크 * - 누구 있어요? - 70 년도 세마포. 좋은 하나, 그것은 작동합니다. +1 –

+0

이것은 잘 작동합니다. 추한 것조차도 여전히 전체 화면처럼 기본적인 "WindowInteropHelper"또는 일부 dll 가져 오기를 구현하는 것이 좋습니다. 나는 그것에 대해, 일반적으로 좋은 생각을 생각해야합니다! –

+1

실제로 두 WindowState 변경 내용이 Windows XP에서 시각적으로 표현되기 때문에 위와 아래로 이동하는 파란색 제목 표시 줄이있어이 기술로 인해 취해지는 창을 매력적으로 보여주기 때문에 Window XP에서보기 흉한 눈에 띄는 효과를냅니다. – cprcrack

3

Window.Topmost property을 설정해야합니다.

편집

확인은 USER32.DLL을 가져올 경우 작업 표시 줄을 숨길 수 있습니다 Maximizing window (with WindowStyle=None) considering Taskbar

+0

나는'Topmost = true; '를 시도했으며 동작을 변경하지 않을 것입니다. –

+0

작업 표시 줄이 "최상위"로 설정되어 있습니까? 그것은 여기에서 작동합니다. –

+0

어리석은 질문입니다. 작업 표시 줄이 "최상위"로 설정되었는지 어떻게 확인할 수 있습니까? 내가 말했듯이, F11 키를 누르면 (최상위 모드가 있든 없든) 잘 동작합니다. –

0

이 블로그 게시물 ...

[DllImport("user32.dll")] 
private static extern int FindWindow(string className, string windowText); 
[DllImport("user32.dll")] 
private static extern int ShowWindow(int hwnd, int command); 

private const int SW_HIDE = 0; 
private const int SW_SHOW = 1; 

사용법 :

int hwnd = FindWindow("Shell_TrayWnd",""); 
ShowWindow(hwnd,SW_HIDE); 
+5

당신은 방금 내 작업 표시 줄을 파괴! –

+0

전체 화면을 종료 할 때 ShowWindow (hwnd, SW_SHOW)를 호출해야합니다. –

+0

감사합니다. kzen! 어쨌든, 이것은 내게 WPF처럼 떨어진다. 하지만 옵션 일 수 있습니다. –

0

내가 WPF에서 전체 화면을 달성하기 쉬운 방법을 발견했다 :이 고정 된 작업 표시 줄에 Windows 7에서 잘 작동

private double LastHeight, LastWidth; 
    private System.Windows.WindowState LastState; 

    private void Window_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.F11) 
     { 
      if (WindowStyle != WindowStyle.None) 
      { 
       LastHeight = Height; 
       LastWidth = Width; 
       LastState = WindowState; 

       Topmost = true; 
       Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width; 
       Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height; 
       Top = 0; 
       Left = 0; 
       WindowState = System.Windows.WindowState.Normal; 
       WindowStyle = WindowStyle.None; 
       ResizeMode = System.Windows.ResizeMode.NoResize; 
      } 
      else 
      { 
       WindowStyle = WindowStyle.SingleBorderWindow; 
       WindowState = LastState; ; 
       ResizeMode = ResizeMode.CanResizeWithGrip; 
       Topmost = false; 
       Width = LastWidth; 
       Height = LastHeight; 
      } 
     } 
    } 

.

+0

프로그램이 항상 왼쪽 화면에서 최대화되어 있기 때문에 이중 화면 시스템에서 프로그램을 실행할 때이 방법은 작동하지 않습니다. –

3

나를 위해 일한 또 다른 해결책 :

당신은 생성자를 사용 SystemParameters.MaximizedPrimaryScreenHeight 해당 윈도우의 maxHeight property의를 설정할 수 있습니다.

public MainWindow() 
{ 
    InitializeComponent(); 
    this.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight; 
} 

경고 :이 확장 된 바탕 화면에 작동하지 않을 수 있습니다.

출처 : 여전히 부드러운 필요 사람이 있다면Maximize window with WindowState Problem (application will hide windows taskbar)

2

당신이 당신의 창을 볼 수 있습니다

Topmost="True" and WindowState="Maximized" 

이 모든 화면을 커버하고 윈도우 작업 표시 줄

+0

Windows 10에서 다른 어떤 것보다 잘 작동했습니다! (기념일 업데이트) –

1

모든 숨길 시도 물론 전체 화면은 Windows 10에서만 테스트되었습니다! Windows 10에서이 코드 순서를 유지하면 최소화 된 깜박임이 줄어 듭니다.

public bool IsFullscreen = false; 
    public WindowState lastWindowState; 
    private void player_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     if (IsFullscreen) 
     { 
      this.WindowStyle = WindowStyle.SingleBorderWindow; 
      this.WindowState = lastWindowState; 
      IsFullscreen = false; 

     } 
     else 
     { 
      lastWindowState = this.WindowState; 

      this.WindowStyle = WindowStyle.None; 
      if (this.WindowState == WindowState.Maximized) 
       this.WindowState = WindowState.Minimized; 
      this.WindowState = WindowState.Maximized; 
      IsFullscreen = true; 
     } 
    } 
+0

감사합니다. Windows XP 및 Windows 7에서도 잘 작동합니다. – dbostream

+0

이 질문에 대한 대답은 최대화 단추의 동작을 변경하는 방법을 묻는 동안 MouseDoubleClick 이벤트를 사용한다는 것입니다. 이것이 효과적 일지 만,이 예제에서 사용 된 이벤트가 변경되어 문제를 해결할 수 있다면 더 좋을 것입니다. –

1

사용자 정의 크롬 경험을 만들 수 WindowChrome를 사용하는 일 경우 0이 아닌 다른 (적어도 내가 작업 표시 줄을 얻기 위해 할 필요가있는 마지막 일이었다 그에게 GlassFrameThickness를 설정해야합니다 창문 뒤에 숨어 있음). 이는 승인 된 답변에서 제공된 단계에 추가됩니다.

0

필자의 경우, 최소화 및 최대화하면 전체 화면 크기가 화면보다 약간 커집니다. 따라서 대안을 찾으면 일시적으로 가시성을 축소로 설정 한 다음 나중에 다시 표시로 설정하여 강제로 다시 그릴 수 있습니다.

Visibility = Visibility.Collapsed; 
WindowStyle = WindowStyle.None; 
WindowState = WindowState.Maximized; 
ResizeMode = ResizeMode.NoResize; 
Visibility = Visibility.Visible;