2011-02-08 16 views
9

पर WPF पूर्ण स्क्रीन मैं मूल रूप से अपनी WPF विंडो को पूर्ण स्क्रीन मोड में जाना चाहता हूं, जब F11 दबाया जाता है या विंडो के दाएं कोने में अधिकतम बटन दबाया जाता है।अधिकतम

जबकि 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

ऐसा लगता है कि डब्ल्यूपीएफ निर्णय ले रहा है अगर पूर्णता के समय विंडो स्टाइल पर आधारित पूर्ण स्क्रीन पर जाएं या टास्कबार का सम्मान करें या नहीं। तो एक kludgy लेकिन प्रभावी समाधान खिड़की करने के लिए गैर अधिकतम, 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); 
} 

हालांकि कोड स्पष्ट रूप से बदसूरत है, सामान्य के लिए संक्रमण और फिर मैक्सिमाइज्ड पर वापस उपयोगकर्ता अनुभव को और भी खराब नहीं लग रहा है। मेरे प्रदर्शन पर, मैंने एफ 11 कोड और क्लज अधिकतम दोनों के साथ झिलमिलाहट देखी, लेकिन क्लिज अधिकतम पर ध्यान से खराब नहीं है। लेकिन आपका लाभ भिन्न हो सकता है!

+5

* दस्तक दस्तक * - कौन है? - '70 से एक सेमफोर। अच्छा है हालांकि, यह काम करता है। +1 –

+0

यह एक ठीक काम करता है। यहां तक ​​कि यह बदसूरत है, फिर भी यह बेहतर लगता है कि 'विंडोइंटरोपेलर' या कुछ डीएल आयात को पूर्णस्क्रीन जैसी बुनियादी चीज़ों के लिए लागू करना बेहतर है। मुझे इसके बारे में सोचना है, आम तौर पर अच्छा विचार! –

+1

वास्तव में यह विंडो एक्सपी में एक बदसूरत दृश्य प्रभाव बनाता है, क्योंकि दोनों विंडोस्टेट परिवर्तनों में विंडोज एक्सपी में एक दृश्य प्रतिनिधित्व होता है, जो एक नीली शीर्षक-बार ऊपर और नीचे जा रहा है, जिससे इस तकनीक के साथ एक नशे में खिड़की अपील हो रही है। – cprcrack

3

आपको Window.Topmost property सेट करने की आवश्यकता है।

संपादित

चेक इस ब्लॉग पोस्ट Maximizing window (with WindowStyle=None) considering Taskbar

+0

मैंने 'टॉपस्ट = सत्य' की कोशिश की, और यह व्यवहार को नहीं बदलेगा। –

+0

क्या आपका टास्कबार "सबसे ज्यादा" पर सेट है? यह यहाँ काम करता है। –

+0

बेवकूफ सवाल। मैं कैसे जांच सकता हूं कि मेरी टास्कबार "सबसे ज्यादा" पर सेट है या नहीं। जैसा कि मैंने कहा, यह ठीक काम करता है (बिना और शीर्ष 'के') एफ 11 दबाकर। –

0

यदि आप user32.dll आयात टास्कबार छिपा कर सकते हैं ...

[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! वैसे भी, यह मेरे जैसे बहुत डब्ल्यूपीएफ नहीं गिरता है। लेकिन यह एक विकल्प हो सकता है। –

0

मैं WPF में पूर्ण स्क्रीन प्राप्त करने के लिए आसान तरीका मिल गया है:

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; 
      } 
     } 
    } 

यह विंडोज 7 में अच्छा काम करता है तय टास्कबार के साथ।

+0

इस तरह काम नहीं करता है जब आप दोहरी स्क्रीन मशीन पर प्रोग्राम चला रहे हैं क्योंकि प्रोग्राम हमेशा बाएं स्क्रीन पर अधिकतम होता है। –

3

एक अन्य समाधान है कि मेरे लिए काम किया:

आप निर्माता का उपयोग कर SystemParameters.MaximizedPrimaryScreenHeight है कि विंडो के maxHeight गुण सेट कर सकते हैं।

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

चेतावनी: इस विस्तारित डेस्कटॉप पर काम न करे।

स्रोत:Maximize window with WindowState Problem (application will hide windows taskbar)

2

कोशिश इस

Topmost="True" and WindowState="Maximized" 

आप अपनी खिड़की से देख सकते हैं सब स्क्रीन को कवर और खिड़कियों टास्कबार

+0

विंडोज 10 पर किसी भी अन्य से बेहतर काम किया! (वर्षगांठ अद्यतन) –

1

के साथ सभी छुपा देगा अगर अभी कोई एक चिकनी की जरूरत है वह यह है कि पाठ्यक्रम की पूरी स्क्रीन केवल विंडोज 10 पर परीक्षण! यदि आप इस कोड ऑर्डर को बनाए रखते हैं तो विंडोज़ 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

धन्यवाद, विंडोज एक्सपी और विंडोज 7 पर भी बहुत अच्छा काम करता है। – dbostream

+0

इस उत्तर के साथ एक समस्या यह है कि यह माउसDoubleClick ईवेंट का उपयोग करता है जबकि सवाल पूछता है कि अधिकतम आकार के व्यवहार को कैसे बदला जाए। हालांकि यह काम करेगा, यह बेहतर होगा अगर इस उदाहरण में इस्तेमाल की गई घटना बदल गई ताकि वह प्रश्न को संबोधित कर सके। –

1

आप एक कस्टम क्रोम अनुभव बनाने के लिए WindowChrome का उपयोग करने की है, तो आप 0 के अलावा कुछ (कम से कम है कि पिछले बात मैं TaskBar पाने के लिए क्या करने की जरूरत थी GlassFrameThickness सेट करना होगा खिड़की के पीछे छिपाने के लिए)। यह स्वीकार किए गए उत्तर में दिए गए चरणों के अतिरिक्त है।

0

मेरे मामले में, कम से कम और अधिकतम करने से स्क्रीन के मुकाबले पूर्णस्क्रीन आकार थोड़ा बड़ा हो जाएगा, इसलिए मुझे जो विकल्प मिला वह अस्थायी रूप से दृश्यता को ढीला करने के लिए अस्थायी रूप से फिर से दृश्यमान करने के लिए दृश्यमान पर सेट करना है।

Visibility = Visibility.Collapsed; 
WindowStyle = WindowStyle.None; 
WindowState = WindowState.Maximized; 
ResizeMode = ResizeMode.NoResize; 
Visibility = Visibility.Visible; 
संबंधित मुद्दे