以编程方式向网格添加标签

18

大家好,我正在尝试使用以下代码向我的网格添加一个标签:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
  Dim dynamicLabel As New Label()
  Dim g As New Grid

  dynamicLabel.Name = "NewLabel"
  dynamicLabel.Content = "TEST"
  dynamicLabel.Width = 240
  dynamicLabel.Height = 30
  dynamicLabel.Margin = New Thickness(0, 21, 0, 0)
  dynamicLabel.Foreground = New SolidColorBrush(Colors.White)
  dynamicLabel.Background = New SolidColorBrush(Colors.Black)

  Grid.SetRow(dynamicLabel, 0)
  Grid.SetColumn(dynamicLabel, 6)
  g.Children.Add(dynamicLabel)
End Sub

然而,当我按下按钮后,网格上没有任何东西显示......我错过了什么吗?


你有多少列?在 Grid.SetColumn 中,你把标签添加到第50列。 - LPL
@LPL 我现在网格里只有7个标签。我尝试将50替换为8,但仍未显示。 - StealthRT
但是你在 Grid.ColumnDefinitions 中定义了多少列呢?顺便说一句:列索引是从零开始的。 - LPL
@LPL 只有一个。只是在 <Grid.ColumnDefinitions> 中显示了 <ColumnDefinition Width="Auto" /> - StealthRT
我不确定未发布的代码。但后来我同意@H.B. - LPL
@LPL更新了OP并添加了新代码。 - StealthRT
4个回答

21

我通过为另一个网格命名来进行了更正。我从未为该网格命名,这就是为什么 .Children.Add 永远不会将内容添加到该网格的原因。我尝试过使用 mainGrid.Children.Add (mainGrid 是我的父网格的名称),但它总是会抛出错误,因为它需要的是其中的网格 内部 部分。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) //Handles Button1.Click
  Dim dynamicLabel As new Label();

  dynamicLabel.Name = "NewLabel";
  dynamicLabel.Content = "TEST";
  dynamicLabel.Width = 240;
  dynamicLabel.Height = 30;
  dynamicLabel.Margin = new Thickness(0, 21, 0, 0);
  dynamicLabel.Foreground = new SolidColorBrush(Colors.White);
  dynamicLabel.Background = new SolidColorBrush(Colors.Black);

  Grid.SetRow(dynamicLabel, 0);
  Grid.SetColumn(dynamicLabel, 0);
  childGrid.Children.Add(dynamicLabel); //'<-changed to grid name in XAML properties
End Sub

2

如果您需要向网格中添加按钮或标签(将Button更改为Label),可以使用以下代码:

internal void FillbtnSubCat(Grid grid)
    {
        var myDefinition = new ColumnDefinition();

        var myButton = new Button();

        Grid.SetColumn(myButton, count);

        myButton.Margin = new Thickness(5, 10, 5, 25);
        myButton.MinWidth = 30;
        myButton.Content = count;

        myButton.Click+= new RoutedEventHandler(Click1);

        myDefinition.Width = new GridLength(68);

        grid.ColumnDefinitions.Add(myDefinition);

        grid.Children.Add(myButton);
        count++;
    }


void Click1(object sender, RoutedEventArgs e)
    {
        var myButton = sender as Button;
        MessageBox.Show(myButton.GetHashCode().ToString());
    }

以及XAML
 <ListView Grid.Column="0" Margin="10,10,5,5" Grid.Row="1"  Grid.ColumnSpan="2">
        <Grid Name="Grid1" Height="100" Width="auto">

            </Grid>
    </ListView>

0

gride是dynamicForm.xaml窗口中我的gride的名称。 它创建按钮并添加到gride中,然后在按钮单击事件中,通过单击按钮创建标签。

  public partial class DynamicForm : Window
    {

    Label lb = new Label();


  public DynamicForm()
    {
        InitializeComponent();

        Button dynamicButton = new Button();
        dynamicButton.Content = "Click me";
        Grid.SetRow(dynamicButton, 0);
        Grid.SetColumn(dynamicButton, 0);

        gride.Children.Add(dynamicButton);

        dynamicButton.Click += button1_Click;


    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {


       Label dynamicLabel = new Label();

       dynamicLabel.Name = "NewLabel";
       dynamicLabel.Content = "TEST";
       dynamicLabel.Width = 240;
       dynamicLabel.Height = 30;
       dynamicLabel.Margin = new Thickness(0, 21, 0, 0);
       dynamicLabel.Foreground = new SolidColorBrush(Colors.White);
       dynamicLabel.Background = new SolidColorBrush(Colors.Black);

       Grid.SetRow(dynamicLabel, 1);
       Grid.SetColumn(dynamicLabel, 0);

      gride.Children.Add(dynamicLabel);


    }

}

-1
在这段代码中,您从未将新的网格添加到任何窗口或窗口控件中。

3
这不需要代码示例。你创建了一个网格,但似乎没有对它进行任何操作,为什么会发生任何事情呢? - H.B.
2
不,代码应该是告诉我如何添加到窗口/控件,而不仅仅是告诉我。 - StealthRT
1
@StealthRT:你将标签添加到了网格中,这就是将一个控件添加到另一个控件中。只需将网格与已经在窗口中的另一个控件作为子控件添加即可。此外,你可能本来就不应该这样做。 - H.B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接