ฉันจะใส่เส้นขอบบนกริดใน 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
คุณหมายถึงอะไร "ทั้งเรื่อง"? ฉันสงสัยว่าคุณมีอย่างอื่นอยู่ในตารางของคุณคุณควรโพสต์ว่านั่นคืออะไร ความสงสัยของฉันคือคุณมีการควบคุมดาต้ากริดเช่นเดียวกับคอนเทนเนอร์กริดของคุณ (ซึ่งเป็นสิ่งที่คุณใส่ไว้ในตัวอย่างของคุณและน่าจะมี "ทั้งสิ่ง") และนั่นคือจุดที่เกิดความสับสน
Dan Puzey

คำตอบ:


213

หากคุณต้องการแค่เส้นขอบด้านนอกวิธีที่ง่ายที่สุดคือใส่ไว้ในการควบคุมชายแดน:

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

เหตุผลที่คุณเห็นว่าเส้นขอบเติมเต็มการควบคุมของคุณโดยค่าเริ่มต้นนั้น HorizontalAlignment และ VerticalAlignment ถูกตั้งค่าเป็น Stretch ลองทำดังต่อไปนี้:

<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 ... )


มันไม่ได้ผลตามที่ฉันต้องการ ... ฉันได้เพิ่มรหัสในคำถามของฉันแล้ว
Jason94

3
@ Jason94: ฉันอัปเดตคำตอบเพื่อแสดงให้คุณเห็นว่าจะได้รับสิ่งที่ฉันคิดว่าคุณเป็นอย่างไร ...
Reed Copsey

@ReedCopsey Reed ฉันรู้ว่าโซลูชันของคุณใช้ได้ผลสิ่งที่ฉันไม่เข้าใจคือเหตุใดองค์ประกอบ Border จึงอยู่ในองค์ประกอบกริด - ตัวนับนี้ไม่ใช้งานง่าย? ขอบคุณ.
Sabuncu

2
@Sabuncu คุณจะสังเกตเห็นว่าต้นฉบับของฉันไม่มี - ฉันกำลังแก้ไข "งาน" ของ OP
Reed Copsey

1
สิ่งนี้ดูเหมือนว่าจะวางนักเรียนประจำไว้รอบ ๆ ด้านในของหน้าต่างหลักของฉันไม่ใช่รอบนอกของตะแกรงที่ห่อหุ้มอยู่ภายใน ความคิดใด ๆ ทำไม?
Brady

9

หากซ้อนเส้นตารางของคุณในตัวควบคุมเส้นขอบ

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

ไม่ได้ทำในสิ่งที่คุณต้องการคุณจะต้องสร้างเทมเพลตการควบคุมของคุณเองสำหรับเส้นตาราง (หรือเส้นขอบ) ที่ทำในสิ่งที่คุณต้องการ


โอ้ ... โอเค: D คิดว่ามีตัวแปรที่ฉันมองข้ามไปหรือบางสิ่งบางอย่างที่แฟนซี WPF (ฉันใหม่ที่มัน: D)
Jason94

คุณไม่สามารถสร้าง Template สำหรับ Grid และ Border ได้เนื่องจากไม่มีคุณสมบัติ Template เนื่องจากไม่ได้มาจาก Control แต่มาจาก Panel และ Decorator Reed Copsey มี (สวยเรียบง่าย) วิธีการแก้ปัญหา
gehho

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>

รหัสนี้ตัดขอบภายใน "innerGrid"


สวัสดี @ElvinMammadov คุณสามารถอธิบายเพิ่มเติม คุณได้รับข้อผิดพลาดหรือไม่? รหัสนี้ใช้ได้ดีสำหรับฉัน
PJ3

1
ต้องเพิ่ม Grid.ColumnSpan = "คอลัมน์ที่คุณต้องการครอบคลุม" Grid.RowSpan = "แถวที่คุณต้องการครอบคลุม" ในแท็กชายแดน มิฉะนั้นจะครอบคลุมเฉพาะเซลล์แรกเท่านั้น
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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.