2009-09-23 15 views
17

Windows Media Player veya Browser tabanlı Flash oynatıcılar ile aynı efekti elde etmek istiyorum. Bu, maksimize edildiğinde ENTIRE (görev çubuğu görünür değil) gayrimenkulünü alan Flash oynatıcılar.WPF Penceresiyle = Uygulamanın başlatılmasından sonra Maksimize edildiğinde hiçbiri görev çubuğu yok

WindowStateMaximized olarak ayarlanır ve uygulama o durumda başlatılmışsa böylece WindowStyle XAML None için ayarlanırsa bu iyi çalışır. Sorun, uygulamayı kenarlıklı bir pencerede başlatmak istiyorum ve kullanıcı seçtiğinde, yukarıda belirtildiği gibi en üst düzeye çıkar. StateChanged işleyicisinde Maximized durumunu denetleyin ve bu durumda WindowStyle değerini None olarak ayarlayın. Bu, pencereyi en üst düzeye çıkarmak ancak görev çubuğunu KAPATMAMA etkisine sahiptir. Istediğim gibi aşağıdaki kod bu işi yapacak ama onun kesmek ve bunu temizlemek istiyorum:

if (WindowState == WindowState.Maximized) 
{ 
    m_videoWindow.Maximize(); 

    WindowStyle = WindowStyle.None; 

    //the following makes this work but I would like to clean it up 
    Hide(); 
    Show(); 
} 

DÜZENLEME This (2006 hala CTP olarak) MS'den sorunu ve kimse bahseder Bir sonraki versiyonda tam ekran desteğini geliştirmeyi umduklarını belirtiyorlar, bu gelişmeler oldu mu?

+0

Bu sorun, WPF/.NET 4.0'ın en son sürümleriyle hala canlı ve iyi ... - Sanırım Microsoft bu hatanın geriye dönük olarak uyumlu olmasını istiyordu ... gizleme/show düzeltmeniz harika çalışıyor ... Benimkini biraz farklı yapıyorum, Saklan'ı çağırıp, özellikleri ayarladıktan sonra Show'u arıyorum. – BrainSlugs83

+0

İyi lanet olsun. Kontrollerimden bazilarinin dogru bir sekilde yeniden boyutlandirilmadigini, neden oldugunu (siparişimle veya siparişinizle) farkedemedim; Hızlı çözüm En üst düzeye çıkarmak, DoEvents() öğesini çağırmak, WindowStyle öğesini Yok olarak ayarlamak, ardından Gizle & Göster'i çağırmaktı. - DoEvents elbette System.Windows.Forms.Application.DoEvents() (Evet, bu çılgın ve muhtemelen en kötü uygulama biliyorum, ama işe yarıyor ...) – BrainSlugs83

cevap

13

Bu makalenin tamamı aşağıdaki gibidir: Maximizing window (with WindowStyle=None) considering Taskbar. Ayrıca, kontrol etmeye de dikkat: Custom Window Chrome in WPF.

Düzenleme: Artık yeni, yeniden boyutlandırma, taşıma reimplementing sıkıntıları olmadan pencere krom tam restyle verir WPF Shell Entegrasyon Kütüphanesi, vb olduğunu

Düzenleme: Kabuk Entegrasyonu Kütüphanesi şimdi WPF ve MS'ye entegre edilmiş olan kod

+0

Teşekkürler Eduardo. Onu okudum ama Win32 gerektirmeyen bir çözüm olduğunu umuyordum. Eminim ki bir şey olmalı, yukarıda bahsettiğim kesmek gibi .... –

+0

Sanırım yok, çünkü davranış tasarım gereğidir, yani BabySmash gibi tüm masaüstünü alan bir pencereye sahip olabilirsiniz. –

+1

Pencereyi WindowStyle = None ve WindowState = Maximized ile yüklediğinizde, görev çubuğu gizlenmez, ancak yüklendikten sonra pencereyi en üst düzeye çıkarırken bu durum böyle değil midir? –

1

emrini verdi. Bunun sizin için uygun olup olmadığını bilmiyorum, ancak pencereyi, çalışma alanından (yani, çoğu durumda, tüm ekrandan) aynı boyutta olacak şekilde yeniden boyutlandırabilirsiniz. görev çubuğu hariç) ve 0,0 (sol üst köşede) olarak konumlandırın:

Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width; 
Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height; 
Left = 0; 
Top = 0; 

(MSDN'den) WorkingArea özelliği için tam tanımı şöyledir:

ekranın çalışma alanını alır. Çalışma alanı, görev çubukları, yuvalanmış pencereler ve yuvalanmış araç çubukları hariç, ekranın masaüstü alanıdır.

private static void RefreshWindowVisibility(Window window) 
     { 
      if (window.OriginalWindowState == WindowState.Maximized) 
      { 
       window.Hide(); 
       window.Show(); 
       window.BringIntoView(); 
      } 
     } 

bir titreşim vardır:

o

+0

Görev çubuğu üstte ne varsa? Yoksa birden fazla monitörünüz var mı? –

+0

Bu durumda, beklendiği gibi çalışmaz. – Fix

+0

Evet, aynı fikre sahiptim, ama aynı itiraza geldi. Yazıklık, uygulamanın hangi monitörde olduğunu sorgulamak ve bu monitör için tam bir RECT almak için basit bir şey değildir ... Muhtemelen yapılacak bir araya getirme çağrısı var, ama ... – BrainSlugs83

2

düzgün ben girmek veya çıkmak tam ekran modunda olduğunda bu işlevi arıyorum benim WPF/.NET 4.0 uygulamasında çalışmak için bu almak için yardımcı olur umarım Bu yöntemle ilişkilidir, ancak Chrome'da tam ekran moduna giderken aynı titreme var gibi görünüyor. Internet Explorer farklı bir yaklaşım sergiliyor gibi görünüyor.

2

Pencereyi oluştururken (xaml olarak) özellikleri ayarlayarak tam ekrana (görev çubuğunu kaplayan) en üst düzeye çıkarabildiğimi, ancak oluşturma işleminden sonra ileri geri geçemediğimi buldum. WindowState setter son geliyor

public bool IsFullscreen 
{ 
    get 
    { 
     return WindowState == System.Windows.WindowState.Maximized 
      && ResizeMode == System.Windows.ResizeMode.NoResize 
      && WindowStyle== System.Windows.WindowStyle.None; 
    } 
    set 
    { 
     if (value) 
     { 
      ResizeMode = System.Windows.ResizeMode.NoResize; 
      WindowStyle = System.Windows.WindowStyle.None; 
      WindowState = System.Windows.WindowState.Maximized; 
     } 
     else 
     { 
      ResizeMode = System.Windows.ResizeMode.CanResize; 
      WindowStyle = System.Windows.WindowStyle.SingleBorderWindow; 
      WindowState = System.Windows.WindowState.Normal;    
     } 
    } 
} 

Not o: Bazı Deneme yaparken sonra ben özellikleri ayarlanır sırası önemli görünmektedir buldum.

İlgili konular