wpf - डब्ल्यूपीएफ: कॉलम/पंक्ति मार्जिन/पैडिंग के साथ ग्रिड?




grid padding (8)

क्या WPF ग्रिड में पंक्तियों या स्तंभों के लिए मार्जिन और / या पैडिंग निर्दिष्ट करना संभव है?

मैं निश्चित रूप से अंतरिक्ष चीजों को अतिरिक्त कॉलम जोड़ सकता हूं, लेकिन यह पैडिंग / मार्जिन के लिए नौकरी की तरह लगता है (यह बहुत आसान एक्सएएमएल देगा)। क्या इस कार्यक्षमता को जोड़ने के लिए किसी ने मानक ग्रिड से व्युत्पन्न किया है?


uwp में (Windows10FallCreators अद्यतन संस्करण और ऊपर)

<Grid RowSpacing="3" ColumnSpacing="3">

आप इस तरह कुछ उपयोग कर सकते हैं:

<Style TargetType="{x:Type DataGridCell}">
  <Setter Property="Padding" Value="4" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type DataGridCell}">
        <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
          <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
        </Border>
      </ControlTemplate>
    </Setter.Value>
  </Setter>

या यदि आपको टेम्पलेट बाइंडिंग की आवश्यकता नहीं है:

<Style TargetType="{x:Type DataGridCell}">
   <Setter Property="Template">
      <Setter.Value>
          <ControlTemplate TargetType="{x:Type DataGridCell}">
              <Border Padding="4">
                  <ContentPresenter />
              </Border>
          </ControlTemplate>
      </Setter.Value>
  </Setter>
</Style>

एक संभावना है कि आप जिस पैडिंग / मार्जिन की तलाश में हैं, उसके रूप में कार्य करने के लिए निश्चित चौड़ाई पंक्तियों और स्तंभों को जोड़ना होगा।

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

एक और तरीका सभी ग्रिड तत्वों को एक पंक्ति और कॉलम ग्रिड के साथ एक निश्चित आकार और मार्जिन में लपेटने के लिए हो सकता है। कि आपके ग्रिड में निश्चित चौड़ाई / ऊंचाई बक्से हैं जिनमें आपके वास्तविक तत्व होते हैं।


कभी-कभी सरल विधि सबसे अच्छी होती है। बस रिक्त स्थान के साथ अपने तारों को पैड करें। यदि यह केवल कुछ टेक्स्टबॉक्स आदि है तो यह अब तक की सबसे सरल विधि है।

आप निश्चित रूप से रिक्त कॉलम / पंक्तियों को निश्चित आकार के साथ भी सम्मिलित कर सकते हैं। बेहद सरल और आप इसे आसानी से बदल सकते हैं।


यद्यपि आप ग्रिड में मार्जिन या पैडिंग नहीं जोड़ सकते हैं, आप फ़्रेम (या समान कंटेनर) जैसे कुछ का उपयोग कर सकते हैं, जिसे आप इसे लागू कर सकते हैं।

इस तरह (यदि आप बटन पर नियंत्रण दिखाते हैं या छिपाते हैं तो क्लिक करें), आपको इसके साथ बातचीत करने वाले प्रत्येक नियंत्रण पर मार्जिन जोड़ने की आवश्यकता नहीं होगी।

इसके बारे में सोचें इकाइयों में नियंत्रण समूहों के समूह को अलग करना, फिर उन इकाइयों को शैली लागू करना।


सेल नियंत्रण के बाहर Border नियंत्रण का उपयोग करें और इसके लिए पैडिंग को परिभाषित करें:

    <Grid>
        <Grid.Resources >
            <Style TargetType="Border" >
                <Setter Property="Padding" Value="5,5,5,5" />
            </Style>
        </Grid.Resources>

        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <Border Grid.Row="0" Grid.Column="0">
            <YourGridControls/>
        </Border>
        <Border Grid.Row="1" Grid.Column="0">
            <YourGridControls/>
        </Border>

    </Grid>


स्रोत:


हाल ही में कुछ सॉफ्टवेयर विकसित करते समय मैं इस समस्या में भाग गया और यह पूछने के लिए मुझसे क्यों हुआ? उन्होंने ऐसा क्यों किया है ... जवाब मेरे सामने ठीक था। डेटा की एक पंक्ति एक वस्तु है, इसलिए यदि हम ऑब्जेक्ट ओरिएंटेशन बनाए रखते हैं, तो किसी विशेष पंक्ति के लिए डिज़ाइन अलग किया जाना चाहिए (मान लीजिए कि आपको बाद में पंक्ति प्रदर्शन को फिर से उपयोग करने की आवश्यकता है)। तो मैंने अधिकांश डेटा डिस्प्ले के लिए डाटाबेस स्टैक पैनल और कस्टम नियंत्रण का उपयोग शुरू किया। सूचियों ने कभी-कभी उपस्थिति की है लेकिन ज्यादातर ग्रिड केवल प्राथमिक पृष्ठ संगठन (हेडर, मेनू क्षेत्र, सामग्री क्षेत्र, अन्य क्षेत्रों) के लिए उपयोग किया गया है। आपकी कस्टम ऑब्जेक्ट्स स्टैक पैनल या ग्रिड के भीतर प्रत्येक पंक्ति के लिए आसानी से किसी भी रिक्ति की आवश्यकताएं प्रबंधित कर सकती हैं (एक ग्रिड सेल में संपूर्ण पंक्ति वस्तु हो सकती है। इसमें अभिविन्यास, विस्तार / ढहने आदि में परिवर्तनों के लिए ठीक से प्रतिक्रिया करने का अतिरिक्त लाभ भी है।

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition />
  </Grid.RowDefinitions>

  <custom:MyRowObject Style="YourStyleHereOrGeneralSetter" Grid.Row="0" />
  <custom:MyRowObject Style="YourStyleHere" Grid.Row="1" />
</Grid>

या

<StackPanel>
  <custom:MyRowObject Style="YourStyleHere" Grid.Row="0" />
  <custom:MyRowObject Style="YourStyleHere" Grid.Row="1" />
</StackPanel>

यदि आपका डेटा बाध्यकारी उपयोग कर रहा है ... इस दृष्टिकोण का मेरा व्यक्तिगत पसंदीदा लाभ यदि आपके कस्टम नियंत्रण डेटाकॉन्टेक्स्ट का वारिस भी करेंगे।


RowDefinition और ColumnDefinition प्रकार ColumnDefinition के प्रकार हैं, और Margin कड़ाई से एक FrameworkElement ColumnDefinition गुण है। तो आपके प्रश्न के लिए, "क्या यह आसानी से संभव है" जवाब सबसे निश्चित संख्या है। और नहीं, मैंने कोई लेआउट पैनल नहीं देखा है जो इस तरह की कार्यक्षमता का प्रदर्शन करता है।

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





margin