2012-02-16 8 views
14

मेरे पास एक उपयोगकर्ता नियंत्रण (एक स्टेटसबार) है जिसमें एक निश्चित न्यूनतम आकार है (संपत्ति के माध्यम से सेट नहीं है, मेरा मतलब यह है कि जब यह न्यूनतम आकार तक पहुंच जाता है तो इसे कम नहीं किया जा सकता है और यह फसल हो जाता है)।WPF में UserControl के न्यूनतम आकार की तुलना में विंडो को छोटा करने से कैसे बचें?

क्या मुख्य विंडो को यह जानने का कोई तरीका है कि UserControl को फसल किया जा रहा है और इसे इसके आकार को कम करने की अनुमति नहीं है? डब्ल्यूपीएफ के रूप में इस तरह के एक स्मार्ट लेआउट सिस्टम के साथ यह एक तरीका होना चाहिए कि यह जानता है कि यह चीजों को फसल कर रहा है। अगली छवि को देखो:

enter image description here

+0

आप किस प्रकार के लेआउट कंटेनर का उपयोग कर रहे हैं (प्रवाह, आदि)? –

+0

मैं वास्तव में एक स्टैकपैन का उपयोग कर रहा हूं लेकिन मैं अपने लक्ष्यों को प्राप्त करने के लिए जो कुछ भी कर सकता हूं उसका उपयोग कर सकता हूं। –

+0

क्या आपने कभी अपनी समस्या पर एक प्रस्ताव प्राप्त किया है? – CodeWarrior

उत्तर

0

आप इसे छोटे कि वांछित हो रही रोकने के लिए नियंत्रण MinHeight गुण सेट कर सकते हैं।

+0

मैंने कोशिश की और यह काम नहीं कर रहा है :(वैसे भी मुझे लगता है कि लेआउट सिस्टम को पता होना चाहिए कि यह उपयोगकर्ता नियंत्रण को फसल कर रहा है और फिर कोड पर निश्चित मान निर्धारित किए बिना एक तरीका होना चाहिए जो रखरखाव को कठिन बना देता है। –

0

क्या आप घटक के साथ पंक्तियों वाली ग्रिड में आइटम डाल सकते हैं?

सभी आइटम जिनकी न्यूनतम ऊंचाई होनी चाहिए, समान न्यूनतम ऊंचाई वाली पंक्तियों में जा सकते हैं।

न्यूनतम ऊंचाई ऊपर = विंडो .MinHeight जोड़ें। इस प्रकार खिड़की आवश्यक पंक्तियों की सामूहिक न्यूनतम ऊंचाई से कभी छोटी नहीं हो सकती है, इसलिए उन पंक्तियों को हमेशा प्रदर्शित करना चाहिए।

0

मुझे लगता है कि मुझे कहीं पढ़ना याद है (मैं गलत हो सकता हूं) कि स्टैक पैनलों में अनंतता के आधार पर सीमाएं हैं, और ऐसे आकार के मुद्दों को संभाल नहीं सकते हैं।

से http://msdn.microsoft.com/en-us/library/ms754152.aspx

DockPanel बनाम StackPanel

DockPanel भी "ढेर" बच्चे तत्वों, DockPanel और StackPanel कुछ उपयोग परिदृश्यों में अनुरूप परिणाम नहीं है कर सकते हैं। उदाहरण के लिए, बाल तत्वों का क्रम डॉकपैनल में उनके आकार को प्रभावित कर सकता है लेकिन स्टैकपैनल में नहीं। ऐसा इसलिए है क्योंकि स्टैकपैनल पॉजिटिव इंफिनिटी पर स्टैकिंग की दिशा में उपाय करता है, जबकि डॉकपैनल केवल उपलब्ध आकार को मापता है।

पोस्ट का एक अनुभाग है जहां यह नेस्टेड पैनलों के बारे में भी बात करता है। जो आपको चाहिए वह हो सकता है।

या शायद नीचे पंक्ति में स्थिति के साथ एक ग्रिड का उपयोग करें?

14

शामिल MinHeight="MinSize" MinWidth="MinSize"<Window> अनुभाग

MinSize अंदर = वांछित पूर्णांक मान पूर्व 400/350 आदि

<Window x:Class="IOTA_WPF.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" 
    WindowState="Maximized" 
    MinHeight="400" MinWidth="650"> 
+1

मिनसाइज एक निश्चित मान नहीं है, यह डीपीआई सेटिंग्स, फ़ॉन्ट आकार सेटिंग्स, आदि पर निर्भर करता है, जहां तक ​​मुझे पता है कि यह एक वैध समाधान नहीं है। वैसे भी कोशिश करने के लिए धन्यवाद। –

+0

MinSize का मतलब वांछित आकार जैसा मैंने समझाया उदाहरण –

+0

मेरे द्वारा पोस्ट किया गया कोड मेरे लिए काम करता है। –

7

मैं जानता हूँ कि इस तथ्य के बाद कई वर्षों है, लेकिन मैं हाल ही में भाग गया इस सवाल के दौरान मैं एक जैसी समस्या से निपट रहा था। इस तरह मैंने इसे हल किया। समाधान मेरी समस्या के लिए विशिष्ट है, लेकिन वांछित आकार बदलने वाले व्यवहारों को प्राप्त करने के लिए बदला जा सकता है।

पहले विंडो को सेट करें ताकि शुरुआत में यह अपनी सामग्री को फिट करने के लिए आकार दे।

<Window ... 
    SizeToContent="WidthAndHeight" > 

अगला मैं प्रत्येक एम्बेडेड नियंत्रण सेट करता हूं ताकि यह वांछित चौड़ाई और ऊंचाई की रिपोर्ट कर सके। अधिकांश निर्मित नियंत्रण आपके लिए यह करते हैं। आप इसे MeasureOverride को ओवरराइड करके कस्टम नियंत्रण के लिए कर सकते हैं या आप नियंत्रण के लिए केवल चौड़ाई और ऊंचाई सेट कर सकते हैं।इसे न्यूनतम आकार बनाएं जिसे आप नियंत्रण प्राप्त करना चाहते हैं।

<MyControl Name="_MyControlName" Width="640" Height="480" /> 

नियंत्रण के व्यवहार को प्रभावित करने वाले इन 'कठिन' कोडित मूल्यों के बारे में चिंता न करें। हम उस के साथ सौदा करते हैं। अब जब विंडो प्रदर्शित होती है तो यह स्वचालित रूप से आपके नियंत्रणों को फिट करने के लिए स्वयं को समायोजित कर देगी।

अगला विंडो लोड किए गए ईवेंट की सदस्यता लें।

<Window ... 
    SizeToContent="WidthAndHeight" Loaded="Window_Loaded" > 

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

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     // We know longer need to size to the contents. 
     ClearValue(SizeToContentProperty); 
     // We want our control to shrink/expand with the window. 
     _MyControlName.ClearValue(WidthProperty); 
     _MyControlName.ClearValue(HeightProperty); 
     // Don't want our window to be able to get any smaller than this. 
     SetValue(MinWidthProperty, this.Width); 
     SetValue(MinHeightProperty, this.Height); 
    } 

जो आप विंडो_लोडेड विधि में रखते हैं वह उस व्यवहार पर निर्भर करेगा जिसे आप पूरा करने की कोशिश कर रहे हैं।

आशा है कि इससे कुछ अन्य लोगों को समय बचाने में मदद मिल सकती है।

+0

एमएमएमएम ... मेरी चिंता यह है कि आप निश्चित आकारों पर अपना प्रारंभिक लेआउट लगा रहे हैं जो गलत हो सकता है और गलत प्रारंभिक लेआउट का कारण बन सकता है। तब आप उससे कैसे निपटेंगे? –

+0

यह एक समस्या हो सकती है। हालांकि यह मेरे लिए नहीं है। अंतर्निर्मित नियंत्रण (लेबल, बटन, आदि) आमतौर पर सटीक आकार की रिपोर्ट करने का एक अच्छा काम करते हैं, और हमारे कस्टम नियंत्रण भी करते हैं (MeasureOverride और ArrangeOverride को ओवरराइड करके)। जो लोग खराब नौकरी करते हैं, उनके लिए आप एक्सएएमएल में एक सभ्य चौड़ाई/ऊंचाई निर्धारित कर सकते हैं या यहां तक ​​कि गणना के आधार पर नियंत्रण के समय के आधार पर गणना कर सकते हैं - फिर कोड के पीछे कोड या डेटा बाइंडिंग के माध्यम से सेट करें। उदाहरण में मैंने इस्तेमाल किया था कि मेरे पास एक वीडियो नियंत्रण था जिसने इस पर एक खराब काम किया था, इसलिए मैंने प्रदर्शित करने से पहले वीडियो स्ट्रीम (640x480) से मिलान करने के लिए आकार निर्धारित किया। – denver

+0

हैलो फिर से, मैं वास्तव में विभिन्न डीपीआई सेटिंग्स, विभिन्न टेक्स्ट आकार सेटिंग्स, चीजों की तरह चीजों के बारे में बात कर रहा था जो निश्चित आकार को समस्याग्रस्त कर सकते हैं, क्या आपने ऐप को एक अलग डीपीआई के साथ करने की कोशिश की है? –

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