2009-11-09 14 views
7

मैं अपेक्षित रूप से काम करने के लिए ऊर्ध्वाधर खिंचाव बनाने की कोशिश कर रहा हूं, लेकिन कुछ कारणों से यह केवल उस स्थान को लेता है, जहां स्थान की आवश्यकता होती है, न कि स्थान उपलब्ध है।डब्ल्यूपीएफ, उम्मीद के अनुसार वर्टिकलस्ट्रेच काम कर रहा है!

सबसे पहले, मैं सी # और प्रिज्म के साथ डब्ल्यूपीएफ का उपयोग कर रहा हूं।

Shell.xaml (एप्लिकेशन के लिए मुख्य xaml) में मेरे पास 2 कॉलम और एक पंक्ति वाला ग्रिड है। विचार एक साइड पैनल और एक मुख्य ऐप क्षेत्र होना है। मुख्य ऐप क्षेत्र ग्रिड ऑटो चौड़ाई और ऑटो ऊंचाई पर सेट है। यह अपेक्षित के रूप में काम कर रहा है, और यह पूरे आवेदन को ऊंचाई और चौड़ाई में फिट करने के लिए स्केल करता है।

फिर मैं मुख्य ऐप क्षेत्र में दृश्य (उपयोगकर्ता नियंत्रण घटक के रूप में) डालने के लिए प्रिज्म का उपयोग कर रहा हूं। UserControl ऑटो चौड़ाई और ऊंचाई पर भी सेट है, और अभिव्यक्ति मिश्रण में डिफ़ॉल्ट सेटिंग्स को देखकर, क्षैतिज एलाइनमेंट और वर्टिकल एलाइनमेंट को खींचने के लिए सेट हैं!

हालांकि, प्रिज्म लोड यूजर कंट्रोल केवल चौड़ाई में फैला है और ऊंचाई में नहीं! दृश्य प्रतिक्रिया के लिए इसे पृष्ठभूमि रंग देकर, मैं देख सकता हूं कि यह आवश्यकतानुसार लंबवत स्थान लेता है, न कि पूरे क्षेत्र में उपलब्ध है!

इसके लिए समाधान क्या हो सकता है? मैंने चौड़ाई और ऊँचाई ऑटो, क्षैतिज और लंबवत संरेखण को मैन्युअल रूप से ओवरराइड करने के लिए सभी सेटिंग्स को गड़बड़ करने की कोशिश की है, लेकिन उम्मीद के अनुसार कुछ भी काम नहीं करता है!

कुछ कोड: (Shell.xaml)

<Window Height="1140" Width="1450"> 
    <Grid Margin="0" Background="White"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="250" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*" /> 
      </Grid.RowDefinitions> 
      <Grid Background="#FFEEEEEE" Grid.Column="0" Grid.Row="0"> 
      </Grid>   
      <ItemsControl Width="Auto" Height="Auto" Grid.Row="0" Grid.Column="1" Name="MainRegion" cal:RegionManager.RegionName="MainRegion" Padding="10" Margin="10, 0, 0, 0" Background="#FFFFFFD5" /> 
     </Grid> 
    </Grid> 
</Window> 

(राय यह है कि माता-पिता ऊंचाई वारिस होना चाहिए):

<UserControl Width="Auto" Height="Auto" Background="Red" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <!-- I want this to take the full width and height of the parent --> 
</UserControl> 

तो इस तरह से देखा गया में लोड कर रहे हैं में एक limitaion है मुख्य xaml, या यह एक UserControl सीमा है, या कुछ और जो मुझे समझ में नहीं आता है?

बस स्पष्ट करने के लिए; मुझे क्षैतिज और लंबवत दोनों को खींचने वाले Shell.xaml में परिभाषित आइटम्स कंट्रोल का पृष्ठभूमि रंग दिखाई देता है, लेकिन आइटम्स कंट्रोल में लोड दृश्य की पृष्ठभूमि नहीं।

ध्यान दें कि बिंदु को समझने में आसान बनाने के लिए मैंने कुछ xaml को हटा दिया है!

धन्यवाद!

उत्तर

8

मुझे एक समाधान मिला। इसे और अधिक readble बनाने के लिए

<ItemsControl> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <Grid/> 
    </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

मैं भी इस मामले में XAML में से कुछ को हटा दिया है: मैं ItemsPanel टेम्पलेट ओवरराइड करने के लिए एक ग्रिड (या इसी तरह कंटेनर) उपयोग करने के लिए है!

धन्यवाद

+0

आप इसे उत्तर के रूप में चिह्नित कर सकते हैं। –

+0

हाँ, एक दिन में यह मेरा उत्तर है –

+0

यदि आपका केवल एक आइटम दिखा रहा है तो आइटम्स कंट्रोल के बजाय ContentControl का उपयोग क्यों न करें। यह मानते हुए कि आप जानबूझकर एक-दूसरे के ऊपर कई वस्तुओं को नहीं डाल रहे हैं। – jpierson

1

क्या आपने आइटम नियंत्रण में स्ट्रेच करने के लिए क्षैतिज सामग्री संरेखण और वर्टिकलकंटेंटलाइन सेट करने की कोशिश की है?

+0

हाँ मेरे पास है, लेकिन कोई फर्क नहीं! स्ट्रेच आइटम्स कंट्रोल में क्षैतिज कंटेंट एलाइनमेंट और वर्टिकलकंटेंट एलाइनमेंट के लिए डिफ़ॉल्ट मान है, लेकिन मैंने वाउल स्ट्रेच के साथ ओवरराइड करने का भी प्रयास किया है! –

+2

मैं ऑटोस से भी छुटकारा पाउंगा; संरेखण चौड़ाई और ऊंचाई निर्धारित करना चाहिए। इसके अलावा, रनटाइम पर, क्या आपने मोल के साथ अपने दृश्य पेड़ का निरीक्षण किया है या wpf snoops में से एक है? – Will

+0

मैं तिल या कुछ ऐसा ही देखूंगा जैसा कि इस तरह के मामलों में वे एक महान समर्थन हो सकते हैं! –

10

ItemsControl.ItemsPanelTemplate के लिए डिफ़ॉल्ट StackPanel है, जो अपने बच्चों खड़ी लक्षण आपके द्वारा बताई गई देने के सभी संपीड़ित करता है।

समाधान कोड-ज़ूप ने इसे <Grid> में बदल दिया। यह तब तक अच्छा काम करेगा जब तक इस क्षेत्र में केवल एक ही दृश्य हो।लेकिन अगर इस क्षेत्र में एक से अधिक दृश्य हैं तो वे सभी एक दूसरे के बगल में एक-दूसरे के ऊपर रखे जाएंगे।

आप एक ऐसे क्षेत्र में ऐसे कई दृश्य संभाल लेकिन विचारों क्षेत्र के पूर्ण आकार तक फैलाने के लिए अनुमति दे सकते हैं, चाहते हैं एक DockPanel बजाय का उपयोग करें:

<ItemsControl> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <DockPanel /> 
    </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

इस पर एक पैनल में पहली बार देखने डाल देंगे बाएं तरफ, इसके बगल में अगला, और आखिरी दृश्य तक जो शेष बचे हुए स्थान को भर देगा।

आपको कई दृश्य खड़ी ढेर की तरह वे StackPanel के साथ किया था के लिए पसंद करते हैं, आप ItemContainerStyle में उसे सेट कर करना होगा:

<ItemsControl> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <DockPanel /> 
    </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
    <Style> 
     <Setter Property="DockPanel.Dock" Value="Top" /> 
    </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 
+0

इस महान जानकारी के लिए धन्यवाद! मुझे ITemsControl में किस प्रकार का घटक उपयोग करने का मूल्यांकन करना होगा, लेकिन अभी के लिए मैं ग्रिड का उपयोग कर रहा हूं और UserControl में मैं एक डॉकपैनल का उपयोग कर रहा हूं। इस तरह से मुझे लगता है कि UserControl के अपने लेआउट का उच्च नियंत्रण है, लेकिन यह आवश्यकता पर निर्भर करेगा। धन्यवाद रे –

+0

@ बिल - मैं इसे दो दिनों तक हल करने की कोशिश कर रहा हूं। @ कोड-ज़ूप को इसे उत्तर के रूप में चिह्नित करना चाहिए। सौभाग्य से मैंने वापस आने और उसके जवाब को लागू करने के बाद आगे पढ़ना सोचा और आपको जिस समस्या का सामना करना पड़ा था, उसे मैंने पढ़ा। फिर भी मैं बहुत खुश हूँ कोड-ज़ूप ने सवाल पूछा। – Tod

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