2010-08-10 5 views
43

अच्छी तरह से this प्रश्न और this प्रश्न समान हैं लेकिन कोई जवाब नहीं है। असल में मैं उम्मीद कर रहा था कि विंडोस्टार्टअप स्थान = सेंटरऑनर काम करेगा ... ऐसा नहीं है। ऐसा लगता है कि मुख्य विंडो के केंद्र में ग्रिड कॉलम के केंद्र में नई विंडो केंद्र नहीं है। तो मुझे लगता है कि यह सोचता है कि माता-पिता है। दूसरा जब मैं संवाद बंद करता हूं और इसे फिर से खोलता हूं तो यह केंद्रित नहीं होता है लेकिन पिछली स्थिति से नीचे और दाएं स्थानांतरित होता है। और यदि मैं मुख्य विंडो को दूसरी मॉनीटर पर ले जाता हूं तो पॉपअप अभी भी डिफ़ॉल्ट मॉनीटर पर खुलता है। क्या ये गुण गलत हैं या क्या मैं सोच रहा हूं कि इसे एक अलग तरीके से काम करना चाहिए। मुझे लगता है कि मैं मैन्युअल रूप से शीर्ष और बाएं गुणों की गणना कर सकता हूं। मैं चाहता हूं कि पॉपअप मुख्य विंडो में केंद्रित हो, चाहे वह कहीं भी हो।WPF WindowStartupLocation = "CentreOwner" वास्तव में केंद्र नहीं है, और पूरी तरह से पॉप, क्यों?

उत्तर

66

शायद क्योंकि आप मालिक सेट नहीं किया:

this.Owner = App.MainWindow; // for example 

है यही कारण है कि मैं इसे कैसे करते हैं और इसे खिड़की पूरी तरह से हर समय केंद्रित है।

क्या विल Eddins टिप्पणी की जिस पर विस्तार करने के लिए, आप अपने विंडो में ShowDialog() या शो() के लिए एक अधिभार विधि बना सकते हैं:

public void ShowDialog(Window owner) 
{ 
    this.Owner = owner; 
    this.ShowDialog(); 
} 

public void Show(Window owner) 
{ 
    this.Owner = owner; 
    this.Show(); 
} 

या एक निर्माता ओवरलोड:

public MyWindow(Window owner) 
    : this() 
{ 
    this.Owner = owner; 
} 
+5

वैकल्पिक रूप से, विंडो पर'how() 'या' .ShowDialog() 'को कॉल करने से पहले मालिक को सेट करें:' window.Owner = this; ' –

+0

दोह, आपको मुझसे मजाक करना होगा। इससे पहले मुझे Winforms में थोड़ा सा है। दुखी चीज क्या आप अपने मालिक को डिफॉल्ट नहीं कर सकते हैं जिसने कभी आपको तुरंत चालू किया है? – nportelli

+0

हाहा आप एक कन्स्ट्रक्टर ओवरलोड बना सकते हैं जो स्वामी को लेता है, मैं जवाब में एक उदाहरण जोड़ूंगा। – Carlo

5

हैं आप इसके लिए एक विस्तार बनाते हैं, आप इस अच्छे विचार का पुन: उपयोग कर सकते हैं:

/// <summary> 
/// Opens a window modally, with an owner 
/// </summary> 
/// <param name="window">The window to open</param> 
/// <param name="opener">The owner of the window getting opened</param> 
/// <returns>window.ShowDialog()</returns> 
public static bool? ShowDialog(this Window window, Window opener) 
{ 
    window.Owner = opener; 
    return window.ShowDialog(); 
} 
0

मेरे पास एक ही समस्या थी lem ... लेकिन यह ज्यादातर इस तथ्य के कारण था कि, जब मैं बाल खिड़की से छुटकारा पाना चाहता था, तो मैंने close() के बजाय hide() का उपयोग किया ... इसलिए जब आप इसे फिर से खोलें, क्योंकि यह छिपा हुआ था और बंद नहीं था, जब पैरेंट विंडो चली जाती है, यह अभी भी स्टार्टअप स्थान पर खुलती है ...

तो जब इसे छिपाने के बजाए बच्चे की खिड़की को बंद करें उदाहरण के लिए जब काम करना समाप्त हो जाए।

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