2010-09-17 15 views
63

में भर नहीं पाएगा मेरे पास TextBoxStackPanel के भीतर नियंत्रण है जिसका OrientationHorizontal पर सेट है, लेकिन टेक्स्टबॉक्स को शेष स्टैकपैनल स्पेस को भरने के लिए नहीं मिल सकता है।डब्ल्यूपीएफ टेक्स्टबॉक्स स्टैकपैनल

XAML:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Height="180" Width="324"> 

    <StackPanel Background="Orange" Orientation="Horizontal" > 
     <TextBlock Text="a label" Margin="5" VerticalAlignment="Center"/> 
     <TextBox Height="25" HorizontalAlignment="Stretch" Width="Auto"/> 
    </StackPanel> 
</Window> 

और यह कि यह दिखता है:

alt text

क्यों कि पाठ बॉक्स StackPanel भरने नहीं है?

मैं जानता हूँ कि मैं एक Grid नियंत्रण का उपयोग करके अधिक नियंत्रण हो सकता है, मैं सिर्फ लेआउट के बारे में संदेह में हूँ।

उत्तर

107

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

आप true करने के लिए एक DockPanel साथ LastChildFill सेट का उपयोग और Left लिए सभी नॉन-भरने नियंत्रण गोदी प्रभाव आप चाहते हैं अनुकरण करने के लिए कर सकते हैं।

<DockPanel Background="Orange" LastChildFill="True"> 
    <TextBlock Text="a label" Margin="5" 
     DockPanel.Dock="Left" VerticalAlignment="Center"/> 
    <TextBox Height="25" Width="Auto"/> 
</DockPanel > 
+6

बस स्पष्ट करने के लिए - LastChildFill डिफ़ॉल्ट रूप से "सत्य" पर सेट है और टेक्स्टबॉक्स के लिए खींचने के लिए क्षैतिज असाइनमेंट सेट करने का कोई प्रभाव नहीं पड़ता है। :-) – Goblin

+0

@ गोब्लिन: हाँ ... मैंने ओपी के कोड की प्रतिलिपि बनाई और चिपकाया लेकिन 'क्षैतिज हस्ताक्षर 'को हटाने के लिए भूल गया। :) –

+0

गंभीरता से, यह डिजाइन द्वारा है? अजीब लगता है, क्योंकि नियंत्रण स्वयं पूरी चौड़ाई फैल रहा है। क्या आप कह रहे हैं कि सामग्री क्षेत्र आवश्यक क्षेत्र के समान नहीं है? –

1

मैं बजाय एक ग्रिड का उपयोग कर की सिफारिश करेंगे:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Height="180" Width="324"> 

    <Grid Background="Orange"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 

     <TextBlock Grid.Column="0" Text="a label" 
      VerticalAlignment="Center"/> 
     <TextBox Grid.Column="1"/> 
    </Grid> 
</Window> 

इस समस्या को हल प्राप्त करने के लिए अन्य तरीके से ऊपर के बजाय के दाईं ओर लेबल ढेर है। मैंने देखा कि यूडब्लूपी में हेडर प्रॉपर्टी में बनाया गया है जिसका उपयोग आप इसके लिए कर सकते हैं, यह सुनिश्चित नहीं है कि हेडर प्रॉपर्टी डब्ल्यूपीएफ के लिए मौजूद है या नहीं।

<TextBox Header="MyLabel" /> 
संबंधित मुद्दे