मैं कोड के माध्यम से WPF नियंत्रण कैसे उत्पन्न करूं?

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

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

XAML:




सी#:

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);
}

अपडेट

यहां डरावना बिट है:

  • XP पर VS2008 प्रो का उपयोग करना

  • WPFbrowser प्रोजेक्ट टेम्पलेट (3.5 सत्यापित)

मैं स्वत: पूर्ण तरीकों को प्राप्त नहीं करता हूं।

0
ro fr bn

4 उत्तर

WPF संलग्न गुण नामक एक मजेदार चीज़ का उपयोग करता है। तो आपके एक्सएएमएल में आप इसे लिख सकते हैं:


और यह आपके ग्रिड के सेल (0,0) में टेक्स्टब्लॉक को प्रभावी ढंग से ले जाएगा।

कोड में यह थोड़ा अजीब लग रहा है। मुझे विश्वास है कि यह कुछ ऐसा होगा:

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

ऊपर दिए गए लिंक पर एक नज़र डालें - संलग्न गुणों को एक्सएएमएल में सहजता से दिखने वाले कोड की कीमत पर वास्तव में करना आसान बनाता है।

0
जोड़ा

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

सी # में:

Grid.SetRow( cell, rownumber )

एक्सएएमएल में:

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

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
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
जोड़ा