2009-05-22 41 views
52

में बाल नियंत्रण के बीच अंतर मेरे पास एक WPF विंडो पर प्रदर्शित करने के लिए कुंजी/वैल्यू जोड़े का एक सेट है। मैं बहुत की तरह उन्हें बाहर रखना एक ग्रिड का उपयोग कर रहा हूँ:डब्ल्यूपीएफ ग्रिड

<Grid Margin="4"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

    <Label Grid.Row="0" Grid.Column="0">Code</Label> 
    <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Code}"/> 

    <Label Grid.Row="1" Grid.Column="0">Name</Label> 
    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Name}"/> 
</Grid> 

लेकिन जब मैं इस प्रदर्शित करते हैं, बक्सें उनके ऊपर और नीचे की सीमाओं/नीचे ऊपर पाठ बॉक्स को छूने के साथ कुचल कर रहे हैं। इस लेआउट में पंक्तियों में लंबवत स्थान जोड़ने का सबसे अच्छा तरीका क्या है?

+0

सुंदर सरल समाधान: बस सेट ऊंचाई के साथ अतिरिक्त पंक्तियां जोड़ें। तो यदि आप पंक्तियों के बीच 3 पिक्सेल की जगह चाहते हैं, तो बस 3 के सेट ऊंचाई के साथ एक नई पंक्ति बनाएं। – Krythic

उत्तर

78

व्यक्तिगत नियंत्रण पर मार्जिन सेट करना सबसे आसान तरीका है। इसे टेक्स्टबॉक्स पर सेट करना पर्याप्त होना चाहिए, क्योंकि एक बार जब वे बाहर निकलते हैं तो लेबल प्रत्येक पंक्ति के केंद्र में लंबवत सेट हो जाएंगे और वैसे भी बहुत सारी जगह होगी।

आप एक बार किसी शैली का उपयोग यह निर्धारित कर सकते हैं:

<Grid Margin="4"> 
    <Grid.Resources> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Margin" Value="0,0,0,4" /> 
     </Style> 
    </Grid.Resources> 

    ... 
</Grid> 

यह आपके ग्रिड के अंदर किसी भी पाठ बॉक्स के नीचे करने के लिए एक 4 पिक्सेल मार्जिन जोड़ देगा।

+0

यह मेरे लिए काम नहीं कर रहा है। क्या यह काम नहीं करता है अगर प्रश्न में नियंत्रण में पहले से ही शैली है? मैं मैन्युअल रूप से नियंत्रण पर मार्जिन सेट कर सकता हूं, लेकिन आपके उदाहरण के माध्यम से नहीं। – Krythic

+0

मुझे एक वैकल्पिक समाधान मिला। मैंने जो कुछ किया वह 3 पिक्सेल की ऊंचाई के साथ नियंत्रण के बीच एक अतिरिक्त पंक्ति जोड़ दिया गया था। एक जादू की तरह काम करता है। – Krythic

47

एक और अच्छा दृष्टिकोण यहाँ देखा जा सकता: http://blogs.microsoft.co.il/blogs/eladkatz/archive/2011/05/29/what-is-the-easiest-way-to-set-spacing-between-items-in-stackpanel.aspx

इससे पता चलता है, एक संलग्न व्यवहार बनाने का तरीका तो इस तरह कि वाक्य रचना काम करेगा:

<StackPanel local:MarginSetter.Margin="5"> 
    <TextBox Text="hello" /> 
    <Button Content="hello" /> 
    <Button Content="hello" /> 
</StackPanel> 

यह सबसे आसान & सबसे तेज़ तरीका है एक पैनल के कई बच्चों को मार्जिन सेट करें, भले ही वे एक ही प्रकार के न हों। (आईई बटन, टेक्स्टबॉक्स, कॉम्बोबॉक्स, इत्यादि)

+4

+1 ग्रेट। मैंने कक्षा का नाम लेआउटसेटर में बदल दिया और वर्टिकल एलाइनमेंट जैसे कुछ अन्य गुणों को इसे उसी तरह प्रचारित करने के लिए जोड़ा। काश मैं फ्रेमवर्क एलीमेंट के लिए एक शैली को परिभाषित कर सकता हूं ... – surfen

+1

+1, एलाड, यह बहुत अच्छा है – Luke

+0

ध्यान दें कि यदि बच्चे आइटम को गतिशील रूप से जोड़ा/हटाया जाता है, तो यह काम नहीं करता है, जैसे किसी आइटम नियंत्रण में एक बदलते संग्रह से बंधे । –

2

टेक्स्टबॉक्स के वर्टिकल एलाइनमेंट को केंद्र में सेट करने के बारे में क्या?

<Grid Margin="4"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Height="Auto"/> 
       </Grid.RowDefinitions> 

       <Label Grid.Row="0" Grid.Column="0">Code</Label> 
       <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Code}" VerticalAlignment="Center"/> 

       <Label Grid.Row="1" Grid.Column="0">Name</Label> 
       <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Name}" VerticalAlignment="Center"/> 
      </Grid> 
संबंधित मुद्दे