मैं WPF में अपने ग्रिड पर बॉर्डर कैसे लगाऊं?


119

मैं C # / WPF में अपने ग्रिड पर बॉर्डर कैसे लगाऊं?

यह वही है जो मैं इसे पसंद करता हूं, लेकिन अपने आवेदन में लगाए गए ग्रिड नियंत्रण के बजाय पूरी चीज के चारों ओर एक सीमा रखता है।

<Grid>
    <Border BorderBrush="Black" BorderThickness="2">
        <Grid Height="166" HorizontalAlignment="Left" Margin="12,12,0,0" Name="grid1" VerticalAlignment="Top" Width="479" Background="#FFF2F2F2" />
    </Border>
... and so on ...

1
"पूरी बात" से आपका क्या मतलब है? मुझे संदेह है कि आपके ग्रिड के अंदर कुछ और है - आपको शायद वह पोस्ट करना चाहिए जो कि है। मेरा संदेह यह है कि आपके पास कुछ प्रकार के डेटाग्रिड नियंत्रण के साथ-साथ आपके ग्रिड कंटेनर (जो कि आपने अपने नमूने में डाल दिया है और संभवतः "पूरी बात" होगी) और यहीं से भ्रम की स्थिति पैदा होती है।
डैन पूजे

जवाबों:


213

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

<Border BorderBrush="Black" BorderThickness="2">
    <Grid>
       <!-- Grid contents here -->
    </Grid>
</Border>

सीमा को आपके नियंत्रण को पूरी तरह से देखने का कारण यह है कि डिफ़ॉल्ट रूप से, यह क्षैतिज क्षैतिजता है और कार्यक्षेत्र संरेखण स्ट्रेच पर सेट हैं। निम्नलिखित आज़माएँ:

<Grid>
    <Border  HorizontalAlignment="Left" VerticalAlignment="Top"  BorderBrush="Black" BorderThickness="2">
        <Grid Height="166" HorizontalAlignment="Left" Margin="12,12,0,0" Name="grid1" VerticalAlignment="Top" Width="479" Background="#FFF2F2F2" />
    </Border>
</Grid>

यह आपको प्राप्त करना चाहिए कि आप क्या कर रहे हैं (हालांकि आप सभी 4 पक्षों पर मार्जिन चाहते हैं, न कि केवल 2 ...)


यह काम नहीं करता है जैसा मैं चाहता हूं ... मैंने अपने प्रश्न में कुछ कोड जोड़ा है।
जेसन

3
@ जेसन ९ ४: मैंने अपना उत्तर आपको यह दिखाने के लिए अपडेट किया कि मुझे क्या लगता है कि आप कैसे हैं ...
रीड कोपसे

@ReedCopsey रीड, मुझे पता है कि आपका समाधान काम करता है, मुझे समझ में नहीं आता है कि सीमा तत्व ग्रिड तत्व के अंदर क्यों है - क्या यह काउंटर सहज नहीं है? धन्यवाद।
सबुनकु

2
@Sabuncu आप देखेंगे कि मेरे मूल में ऐसा नहीं था - मैं ओपी के "काम" का संपादन कर रहा था
रीड कोपसी

1
ऐसा लगता है कि मेरी मुख्य खिड़की के अंदर एक बोर्डर लगा है न कि उसके बाहर लगे ग्रिड के बाहर। कोई विचार क्यों?
ब्रैडी

9

यदि एक सीमा नियंत्रण में अपने ग्रिड घोंसले के शिकार

<Border>
    <Grid>
    </Grid>
</Border>

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


ओह ... ओके: डी ने सोचा कि एक चर था जिसे मैंने अनदेखा कर दिया था या कुछ फैंसी
डब्ल्यूपीएफ

आप ग्रिड और बॉर्डर के लिए एक टेम्प्लेट नहीं बना सकते क्योंकि उनके पास कोई टेम्प्लेट प्रॉपर्टी नहीं है क्योंकि वे कंट्रोल से नहीं बल्कि पैनल और डेकोरेटर से निकले हैं। रीड कोपसे का (बहुत सरल) समाधान है
गेहो

2

मुझे लगता है कि आपकी समस्या यह है कि मार्जिन सीमा टैग में निर्दिष्ट किया जाना चाहिए और ग्रिड में नहीं।


2

यह बाद का जवाब है जो मेरे लिए काम करता है, अगर भविष्य में इसका उपयोग किसी के लिए भी हो सकता है। मुझे ग्रिड के चारों तरफ एक साधारण सीमा चाहिए थी और मैंने इसे हासिल किया ...

<DataGrid x:Name="dgDisplay" Margin="5" BorderBrush="#1266a7" BorderThickness="1"...

Gridनियंत्रण एक नहीं है BorderBrushविशेषता है, लेकिन DataGridकरता है ...
ΩmegaMan

1
<Grid x:Name="outerGrid">
    <Grid x:Name="innerGrid">
        <Border BorderBrush="#FF179AC8" BorderThickness="2" />
        <other stuff></other stuff>
        <other stuff></other stuff>
    </Grid>
</Grid>

यह कोड "इनरग्रिड" के अंदर एक बॉर्डर लपेटता है


हाय @ElvinMammadov। क्या आप और वर्णन कर सकते हैं क्या आपको कोई त्रुटि हो रही है? यह कोड मेरे लिए ठीक काम करता है।
PJ3

1
सीमा में टैग जोड़ने के लिए आपको "ग्रिड.ओवरस्पैन =" जिन पंक्तियों को आप कवर करना चाहते हैं, उन्हें जोड़ना होगा। अन्यथा यह केवल पहली सेल को कवर करता है।
user3707094

0

अगर कोई समान समस्या में रुचि रखता है, लेकिन XAML के साथ काम नहीं कर रहा है, तो यहां मेरा समाधान है:

var B1 = new Border();
B1.BorderBrush = Brushes.Black;
B1.BorderThickness = new Thickness(0, 1, 0, 0); //You can specify here which borders do you want
YourPanel.Children.Add(B1);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.