2008-08-11 13 views
5

के माध्यम से मैं WPF नियंत्रण कैसे उत्पन्न करूं मैं एक्सएएमएल के आसपास अपना सिर लेने की कोशिश कर रहा था और सोचा कि मैं कुछ कोड लिखने का प्रयास करूंगा।कोड

6 स्तंभ परिभाषाओं द्वारा 6 के साथ एक ग्रिड को जोड़ने के लिए तो ग्रिड कोशिकाएं में से एक में एक TextBlock जोड़ने की कोशिश कर रहा। मैं उस सेल को संदर्भित करने में सक्षम नहीं हूं जो मैं चाहता हूं। ग्रिड पर कोई विधि नहीं है जिसे मैं टेक्स्टब्लॉक जोड़ सकता हूं। केवल grid.children.add (ऑब्जेक्ट) है, कोई सेल परिभाषा नहीं है।

XAML:

<Page x:Class="WPF_Tester.Page1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Page1" 
    Loaded="Page_Loaded"> 

</Page> 

सी #:

  • वी का उपयोग करना:

    private void Page_Loaded(object sender, RoutedEventArgs e) 
    { 
        //create the structure 
        Grid g = new Grid(); 
        g.ShowGridLines = true; 
        g.Visibility = Visibility.Visible; 
    
        //add columns 
        for (int i = 0; i < 6; ++i) 
        { 
         ColumnDefinition cd = new ColumnDefinition(); 
         cd.Name = "Column" + i.ToString(); 
    
         g.ColumnDefinitions.Add(cd); 
        } 
        //add rows 
        for (int i = 0; i < 6; ++i) 
        { 
         RowDefinition rd = new RowDefinition(); 
         rd.Name = "Row" + i.ToString(); 
    
         g.RowDefinitions.Add(rd); 
        } 
        TextBlock tb = new TextBlock(); 
        tb.Text = "Hello World"; 
    
        g.Children.Add(tb); 
    } 
    

    अद्यतन

    यहाँ डरावना सा है S2008 प्रो XP

  • WPFbrowser परियोजना खाका पर (3.5 सत्यापित)

मैं डॉन टी स्वत: पूर्ण में तरीकों मिलता है।

उत्तर

7

डब्ल्यूपीएफ attached properties नामक एक मजेदार चीज का उपयोग करता है। तो अपने XAML में आप इस बारे में हो सकता है:

<TextBlock Grid.Row="0" Grid.Column="0" /> 

और यह प्रभावी रूप से अपने ग्रिड की सेल (0,0) में TextBlock आ जाएगा।

कोड में यह थोड़ा अजीब लग रहा है। मेरा मानना ​​है कि यह की तरह कुछ होगा: ऊपर

g.Children.Add(tb); 
Grid.SetRow(tb, 0); 
Grid.SetColumn(tb, 0); 

उस लिंक पर एक नज़र डालें - संलग्न गुण चीजें वास्तव में XAML में करने के लिए आसान शायद सहज दिखने कोड की कीमत पर हो।

0

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

TextBlock tb = new TextBlock(); 
// 
// Locate tb in the second row, third column. 
// Row and column indices are zero-indexed, so this 
// equates to row 1, column 2. 
// 
Grid.SetRow(tb, 1); 
Grid.SetColumn(tb, 2); 
0

ग्रिड कक्षा के संलग्न गुणों का उपयोग करें।

सी # में

:

Grid.SetRow(cell, rownumber)

XAML में:

<TextBlock Grid.Row="1" />

इसके अलावा, अगर आप गतिशील ग्रिड का उपयोग नहीं करते, XAML मार्कअप भाषा का उपयोग मैं सलाह होगा। मुझे पता है, इसमें एक सीखने की अवस्था है, लेकिन एक बार जब आप इसे महारत हासिल कर लेते हैं, तो यह बहुत आसान होता है, खासकर यदि आप कंट्रोल टेम्पलेट्स और डेटा टेम्पलेट्स का उपयोग करने जा रहे हैं! ;)

0

कुछ नमूने यहां

Grid grid = new Grid(); 

// Set the column and row definitions 
grid.ColumnDefinitions.Add(new ColumnDefinition() { 
    Width = new GridLength(1, GridUnitType.Auto) }); 
grid.ColumnDefinitions.Add(new ColumnDefinition() { 
    Width = new GridLength(1, GridUnitType.Star) }); 
grid.RowDefinitions.Add(new RowDefinition() { 
    Height = new GridLength(1, GridUnitType.Auto) }); 
grid.RowDefinitions.Add(new RowDefinition() { 
    Height = new GridLength(1, GridUnitType.Auto) }); 

// Row 0 
TextBlock tbFirstNameLabel = new TextBlock() { Text = "First Name: "}; 
TextBlock tbFirstName = new TextBlock() { Text = "John"}; 

grid.Children.Add(tbFirstNameLabel); // Add to the grid 
Grid.SetRow(tbFirstNameLabel , 0); // Specify row for previous grid addition 
Grid.SetColumn(tbFirstNameLabel , 0); // Specity column for previous grid addition 

grid.Children.Add(tbFirstName); // Add to the grid 
Grid.SetRow(tbFirstName , 0); // Specify row for previous grid addition 
Grid.SetColumn(tbFirstName , 1); // Specity column for previous grid addition 

// Row 1 
TextBlock tbLastNameLabel = new TextBlock() { Text = "Last Name: "}; 
TextBlock tbLastName = new TextBlock() { Text = "Smith"}; 

grid.Children.Add(tbLastNameLabel); // Add to the grid 
Grid.SetRow(tbLastNameLabel , 1); // Specify row for previous grid addition 
Grid.SetColumn(tbLastNameLabel , 0); // Specity column for previous grid addition 

grid.Children.Add(tbLastName); // Add to the grid 
Grid.SetRow(tbLastName , 1); // Specify row for previous grid addition 
Grid.SetColumn(tbLastName , 1); // Specity column for previous grid addition 
है