2010-08-31 25 views
7

मेरे पास विस्तारणीय पैनल (Expander के माध्यम से) के साथ एक WPF विंडो है। पैनल खिड़की के बाईं तरफ है, और जब खिड़की का विस्तार किया जाता है तो सामग्री फिट करने के लिए बढ़ती है।WPF - बाईं ओर विंडो को विस्तृत करें

डिफ़ॉल्ट रूप से, विंडोज़ शीर्ष-बाईं ओर लगी हुई हैं, इसलिए मेरी विंडो दाईं ओर बढ़ती है। मैं खिड़की बाईं ओर बढ़ना चाहता हूँ।

मैं Window.SizeChanged घटना में निम्नलिखित करने की कोशिश की:

private void onWindowSizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    Left -= (e.NewSize.Width - e.PreviousSize.Width) 
} 

और यह काम करता है, लेकिन विकास झटकेदार है, और मैं एक चिकनी समाधान खोजने के लिए चाहते हैं।

+0

मैं आपके वर्तमान समाधान के साथ खेल रहा हूं, और इसमें भी समस्याएं प्रतीत होती हैं। यदि आप खिड़की की पकड़ के साथ आकार बदलते हैं (यानी विस्तारक का उपयोग नहीं करते हैं), तो आकार बदलने वास्तव में चंचल है। मेरे अंत में, खिड़की का आकार बदलने का कार्य भी आपके विंडो आकार बदलने वाले कोड को तोड़ देता है और यह अब बाईं ओर विस्तारित नहीं होगा। – Dave

उत्तर

4

मैं एक सरल समाधान का उपयोग कर इस पर काबू पाने में कामयाब रहे।

कोड यह रहा:

protected override void OnRenderSizeChanged(SizeChangeInfo sizeInfo) 
{ 
    if (!sizeInfo.WidthChanged) 
    { 
     base.OnRenderSizeChanged(sizeInfo); 
     return; 
    } 
    Hide(); 
    base.OnRenderSizeChanged(sizeInfo); 
    Left -= (sizeInfo.NewSize.Width - sizeInfo.PreviousSize.Width); 
    Show(); 
} 

मैं FrameworkElement.OnRenderSizeChanged के इस ओवरराइड साथ Window.SizeChanged के लिए ईवेंट हैंडलर बदल दिया।

0

आप अपने विस्तारक को ग्रिड में डाल सकते हैं (जहां कॉलम का आकार बदल सकता है) और फिर अपने विस्तारक की विस्तारित संपत्ति को बाईं ओर छोड़ दें?

+0

मैं चाहता हूं कि * विंडो * बाईं ओर बढ़े। विस्तारक बाईं ओर बढ़ रहा है ठीक है, लेकिन खिड़कियों को सामग्री को सही करने के लिए आकार में बदल दिया गया है (इसलिए सब कुछ चलता है)। –

1

समाधान 1

कोशिश विंडो संपत्ति का उपयोग करें: SizeToContent = "चौड़ाई" यह आपकी सामग्री का आकार करने के लिए अपने खिड़की स्केल करेगा और आप अपनी सामग्री एनीमेशन का उपयोग कर और आसान, इस की स्केलिंग कर देगा पैमाने पर कर सकते हैं खिड़की अच्छा और चिकनी।

समाधान 2

आपके सामने एक विंडो जो बड़ा है की तुलना में यह सामग्री है बनाते हैं और अपने पृष्ठभूमि पारदर्शी बना सकता है। आपको अभी भी कुछ तत्वों में पृष्ठभूमि जोड़नी है।

यह इस प्रकार से दिखाई दे सकता है का एक उदाहरण है: example image

+0

समाधान 1 अभी भी विंडो को बाईं ओर आकार बदलने का कारण बन जाएगा, नहीं? और समाधान 2 अच्छा है लेकिन मैं शीर्षक पट्टी के साथ एक नियमित विंडो का उपयोग करने में सक्षम नहीं होगा। मुझे खुद को नकल करना होगा। –

2

मैं एक खिड़की है कि तुम क्या अनुरोध कर रहे हैं की तरह छोड़ दिया करने के लिए विकसित करने के लिए प्रयास नहीं किया है, लेकिन अगर किसी और सब विफल रहता है, मैं विचार करेगा विस्तारक बटन की तरह दिखने के लिए एक बटन को टेम्पलेट करना। फिर अपनी खिड़की को बाईं ओर बढ़ने की कोशिश करने के बजाय, ट्रांसफॉर्म का उपयोग करके अपनी प्राथमिक विंडो के बाईं ओर एक नई विंडो बनाएं।

अद्यतन

ठीक है, गरीब प्रतिपादन प्रदर्शन वीडियो संबंधित कार्ड, लेआउट (बहुत जटिल) से संबंधित, या दोनों हो सकता है। मुझे एक ऐसा विचार है जो आपके लिए चाल कर सकता है। जेफ प्रोसीज ने सिल्वरलाइट में एक आवर्धक ग्लास के बारे में ब्लॉग किया जो वांछित प्रभाव प्राप्त करने के लिए WriteableBitmap का उपयोग करता है। मैंने सोचा, "एक्सपेंडर के दाईं ओर अपने लेआउट का स्क्रीनशॉट बनाने के लिए लिखने योग्य बिटमैप का उपयोग क्यों न करें, और इसके साथ अन्य तत्वों को कवर करें?"। मुझे लगता है कि यदि आप ऐसा करते हैं और अंतर्निहित तत्वों को छुपाते हैं (इसलिए वे समायोजित नहीं होते हैं), प्रदर्शन प्रतिपादन में काफी सुधार होगा।

मुझे जेफ़ का कोड थोड़ा संशोधन के साथ डब्ल्यूपीएफ में काम करने के लिए मिला। & दिखाएँ छिपाएं:

http://www.wintellect.com/CS/blogs/jprosise/archive/2009/10/29/more-fun-with-silverlight-3-s-writeablebitmap.aspx

+0

मैं आपके सुझाव को समझने में असफल रहा। क्या आप विस्तार से बता सकते हैं? –

+0

@ ओमर अच्छी तरह से, * अगर * मैं आपकी स्थिति को सही ढंग से समझ रहा हूं, तो आपके पास एक विस्तारक है जो बाईं ओर खुलता है। लेकिन जब आप ऐसा करते हैं, तो विंडो दाईं ओर बदलती है और पूरी सामग्री चारों ओर स्थानांतरित होती है, जो मुझे लगता है कि आपके लिए थोड़ा चंचल दिख रहा है। यदि आप पूरी खिड़की * बरकरार रखते हैं, तो इसे अपने बच्चों का आकार बदलने की जरूरत नहीं है। आप एक बटन का उपयोग करके इस प्रभाव को नकली कर सकते हैं जो एक विस्तारक की तरह दिखता है, लेकिन जब आप इसे क्लिक करते हैं, तो हैंडलर मुख्य विंडो के बाईं ओर एक पूरी तरह से अलग विंडो बना सकता है, जो पूरी आकार बदलने वाली समस्या से बच जाएगा। और आप इसे एनिमेटेड बना सकते हैं। – Dave

+0

ठीक है, मुझे यह मिल गया है - लेकिन यह साइड-इफेक्ट वाला हैक है: अंतिम परिणाम एक विंडो की तरह नहीं दिखता है (एक शीर्षक शीर्षक के साथ)। मैं एक समाधान की तलाश में हूं जो मुझे एक खिड़की देगी। –

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