2010-06-25 13 views
38

WindowStartupLocation Property के लिए MSDN प्रलेखीकरण के अनुसार:मैं माउस कर्सर के साथ स्क्रीन पर अधिकतम WPF विंडो कैसे बना सकता हूं?

CenterScreen स्थापना का कारण बनता है एक खिड़की के पर्दे कि माउस कर्सर शामिल के केंद्र में तैनात किया जाना है।

हालांकि CenterScreen Field खुद के लिए MSDN दस्तावेज़ को परिभाषित करता है यह कुछ हद तक कम स्पष्ट रूप से के रूप में:

एक खिड़की की स्टार्टअप स्थान स्क्रीन है जिस पर इसे खोला जाता है का केंद्र है। अगर आपके पास दो पर इस परीक्षण अगर

MainWindow.xaml

<Window x:Class="CenterScreenTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <Button Click="button_Click">Open Window</Button> 
</Window> 

MainWindow.xaml.cs

using System.Windows; 

namespace CenterScreenTest 
{ 
    public partial class MainWindow 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     void button_Click(object sender, RoutedEventArgs e) 
     { 
      Window window = new Window(); 
      window.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
      window.Show(); 
     } 
    } 
} 

:

एक साधारण परीक्षण एकदम सही ढंग से काम कर रहे इस से पता चलता मॉनीटर सिस्टम, आप देख सकते हैं कि नई विंडो स्क्रीन पर केंद्रित होगी जहां माउस कर्सर तब होता है जब आप बटन पर क्लिक करते हैं। यह ठीक है कि यह काम करना चाहिए।

हालांकि, यदि आप इसे दिखाने से पहले विंडो को अधिकतम करने के लिए सेट करने का प्रयास करते हैं, तो नई विंडो केवल उस प्रदर्शन पर अधिकतम होगी, जिससे आपने एप्लिकेशन लॉन्च किया था। निम्न के button_Click ईवेंट हैंडलर बदलकर देखें कि मैं क्या मतलब है:

void button_Click(object sender, RoutedEventArgs e) 
{ 
    Window window = new Window(); 
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
    window.WindowState = WindowState.Maximized; 
    window.Show(); 
} 

अब खिड़की केवल जहाँ से आवेदन शुरू की है स्क्रीन पर अधिकतम होगा, चाहे माउस कर्सर जब आप बटन पर क्लिक करें है । यदि आप के बाद विंडो स्थिति को अधिकतम पर सेट करते हैं, तो आप इसे दिखाते हैं, सेंटरस्क्रीन ठीक से काम करता है। यह खिड़की को अधिकतम करने वाले उपयोगकर्ता के बराबर है। उदाहरण के लिए:

void button_Click(object sender, RoutedEventArgs e) 
{ 
    Window window = new Window(); 
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
    window.Show(); 
    window.WindowState = WindowState.Maximized; 
} 

समस्या यहाँ, ज़ाहिर है, कि यह दिखा के बाद विंडो को विस्तृत ऐसे मेरा रूप बहुत लंबे समय तक और किसी ऐप्लिकेशन में ले जाता है, विंडो को तुरंत जगह में पॉप की जरूरत है।

कोई भी समाधान के बारे में जानता है?

उत्तर

36

मैं पर MSDN WPF फोरम वही सवाल पूछा और this awesome workaround साथ एक जवाब मिला:

void button_Click(object sender, RoutedEventArgs e) 
{ 
    Window window = new Window(); 
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
    window.SourceInitialized += (s, a) => window.WindowState = WindowState.Maximized; 
    window.Show(); 
} 

मैं भी माइक्रोसॉफ्ट को यह मुद्दा यह है कि वे वर्तमान में समीक्षा कर रहे हैं के बारे में bug report सबमिट किए हैं।

5

सुनिश्चित करें कि SizeToContent SizeToContent पर सेट है। मैनुअल, अन्यथा यह काम नहीं करेगा।

+0

आपको वास्तव में ** ** उन चीज़ों को करने की आवश्यकता है। सुनिश्चित करने के लिए कृपया मेरा जवाब देखें। वैसे भी +1। –

69

आप XAML

<Window Height="300" Width="300" WindowState="Maximized"> 
</Window> 

में सेट कर सकते हैं आप SizeToContentके मैनुअल सेट करना होगा। विवरण के लिए अन्य उत्तरों देखें।

3

विंडो अधिकतम से शुरू करना XAML मार्कअप के लिए निम्नलिखित अतिरिक्त द्वारा हासिल किया जा सकता है।

<Window Height="300" Width="300" 
    WindowState="Maximized" 
    SizeToContent="Manual"> 
</Window> 

संपत्ति WindowStateके अधीनस्थ SizeToContent, जिसका अर्थ है आप निर्धारित करने की आवश्यकता है कि बाद के मैनुअल (आप वास्तविक अधिकतम चाहते हैं) है। आप SizeToContent से ऊंचाई या चौड़ाई (यदि आप विंडो को एक आयाम में अधिकतम करना चाहते हैं, जबकि दूसरे के नियंत्रण के आकार के आधार पर गणना की गई आकार का पालन करना)।

<Window Height="300" Width="300" 
    WindowState="Maximized" 
    SizeToContent="Width"> 
</Window> 

उपरोक्त विंडो विंडो को ऊपर से नीचे तक बना देगा लेकिन बाएं से दाएं किनारे तक नहीं। यह कुंजी संयोजन विन + शिफ्ट + ऊपर दबाकर बराबर है।

संबंधित मुद्दे