ग्रिड पंक्ति और स्तंभ स्थिति को प्रोग्रामेटिक रूप से कैसे सेट करें


89

मैं एक Stackpanel के अंदर दो ग्रिड है। पहले ग्रिड का नाम ग्रिडएक्स है। प्रारंभ में, ग्रिड के अंदर, पाठ बॉक्स (रोवडेफ्स / कॉलमडिफ्स) का 2 डी सरणी होता है। XAML में टेक्स्टबॉक्स की परिभाषा है

<TextBox x:Name="A1" Grid.Row="4" Grid.Column="5" TextAlignment="Center" />

मैं GridX के हिस्से के रूप में उसी स्थिति में एक TextBlock प्रोग्रामेटिक रूप से जोड़ना चाहता हूं।

प्रभाव इस तरह होना चाहिए

<TextBlock Grid.Row="4" Grid.Column="5"
HorizontalAlignment="Left" VerticalAlignment="Top" Text="10" FontSize="8"/>

इसे कैसे जोड़ा जाए। मैंने यह कोशिश की है:

TextBlock tblock = new TextBlock();
GridX.SetColumn(tblock, cIndex);
GridX.SetRow(tblock, rIndex);

परंतु विफल हो गया।

फिर से मैंने यह कोशिश की:

int rIndex = Grid.GetRow(txtBox);
int cIndex = Grid.GetColumn(txtBox);                               

TextBlock tblock = new TextBlock();
tblock.VerticalAlignment = VerticalAlignment.Top;
tblock.HorizontalAlignment = HorizontalAlignment.Left;
tblock.FontSize = 8;
tblock.Text = rc[i, j - 1];

Grid.SetColumn(tblock, cIndex);
Grid.SetRow(tblock, rIndex);

txtBox.MaxLength = 1;    

अब समस्या यह है कि टेक्स्टब्लॉक दिखाई नहीं देता है। टेक्स्टबॉक्स इसे छुपाता है। तुम्हारी सहायता सराहनीय है।


कोड अपडेट हो गया। अब समस्या टेक्स्टब्लॉक की दृश्यता है
विनोद

जवाबों:


158

संलग्न गुणों के लिए आप या तो उस ऑब्जेक्ट पर SetValue को कॉल कर सकते हैं जिसके लिए आप मूल्य निर्दिष्ट करना चाहते हैं:

tblock.SetValue(Grid.RowProperty, 4);

या मालिक प्रकार पर संपत्ति के लिए स्थैतिक सेट विधि (उदाहरण के लिए जैसा कि आपने आजमाया हुआ तरीका नहीं है) को कॉल करें, इस स्थिति में सेट करें:

Grid.SetRow(tblock, 4);

SetRow ने काम किया जबकि SetValue ने ऐसा नहीं किया: यह पंक्ति छोड़ रहा था जैसा कि (मेरे मामले में शून्य)
एंटोन ट्रोपास्को

1
आपको यह सुनिश्चित करने की आवश्यकता है कि टेक्स्टब्लॉक उदाहरण ग्रिड उदाहरण का हिस्सा है, आप ऐसा कर सकते हैं: mygrid.Children.Add (myTextBlock);
रॉड्रिगो

जब आप रनटाइम पर बदलाव को अंजाम देने की जरूरत हो तो डिस्पैचर का इस्तेमाल करना न भूलें। यह मेरा मामला था।
हेगन

31

यहाँ एक उदाहरण है जो किसी की मदद कर सकता है:

Grid test = new Grid();
test.ColumnDefinitions.Add(new ColumnDefinition());
test.ColumnDefinitions.Add(new ColumnDefinition());
test.RowDefinitions.Add(new RowDefinition());
test.RowDefinitions.Add(new RowDefinition());
test.RowDefinitions.Add(new RowDefinition());

Label t1 = new Label();
t1.Content = "Test1";
Label t2 = new Label();
t2.Content = "Test2";
Label t3 = new Label();
t3.Content = "Test3";
Label t4 = new Label();
t4.Content = "Test4";
Label t5 = new Label();
t5.Content = "Test5";
Label t6 = new Label();
t6.Content = "Test6";

Grid.SetColumn(t1, 0);
Grid.SetRow(t1, 0);
test.Children.Add(t1);

Grid.SetColumn(t2, 1);
Grid.SetRow(t2, 0);
test.Children.Add(t2);

Grid.SetColumn(t3, 0);
Grid.SetRow(t3, 1);
test.Children.Add(t3);

Grid.SetColumn(t4, 1);
Grid.SetRow(t4, 1);
test.Children.Add(t4);

Grid.SetColumn(t5, 0);
Grid.SetRow(t5, 2);
test.Children.Add(t5);

Grid.SetColumn(t6, 1);
Grid.SetRow(t6, 2);
test.Children.Add(t6);

1
for (int i = 0; i < 6; i++)
{
    test.ColumnDefinitions.Add(new ColumnDefinition());

    Label t1 = new Label();
    t1.Content = "Test" + i;

    Grid.SetColumn(t1, i);
    Grid.SetRow(t1, 0);
    test.Children.Add(t1);
}

1

इसे इस्तेमाल करे:

                Grid grid = new Grid(); //Define the grid
                for (int i = 0; i < 36; i++) //Add 36 rows
                {
                    ColumnDefinition columna = new ColumnDefinition()
                    {
                        Name = "Col_" + i,
                        Width = new GridLength(32.5),
                    };
                    grid.ColumnDefinitions.Add(columna);
                }

                for (int i = 0; i < 36; i++) //Add 36 columns
                {
                    RowDefinition row = new RowDefinition();
                    row.Height = new GridLength(40, GridUnitType.Pixel);
                    grid.RowDefinitions.Add(row);
                }

                for (int i = 0; i < 36; i++)
                {
                    for (int j = 0; j < 36; j++)
                    {
                        Label t1 = new Label()
                        {
                            FontSize = 10,
                            FontFamily = new FontFamily("consolas"),
                            FontWeight = FontWeights.SemiBold,
                            BorderBrush = Brushes.LightGray,
                            BorderThickness = new Thickness(2),
                            HorizontalContentAlignment = HorizontalAlignment.Center,
                            VerticalContentAlignment = VerticalAlignment.Center,
                        };
                        Grid.SetRow(t1, i);
                        Grid.SetColumn(t1, j);
                        grid.Children.Add(t1); //Add the Label Control to the Grid created
                    }
                }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.