亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何動態創建和修改新的Grid行元素?

如何動態創建和修改新的Grid行元素?

C#
交互式愛情 2023-09-24 11:21:44
我剛剛開始一個新的 WPF 應用程序。我有一個網格,想要動態創建行(例如按按鈕),然后在該行內創建 TextView/ProgressBar。我已經搜索過如何以編程方式創建網格行。但在每個解決方案中,我都無法訪問里面的內容,并且它變得毫無用處。<Grid x:Name="MainGrid">    <Grid.RowDefinitions>        <RowDefinition Height="Auto" />        <RowDefinition Height="*" />    </Grid.RowDefinitions>    <Button x:Name="AddLineButton" Content="Click to add a new line" Click="AddLineButton_Click"/>    <Grid x:Name="beGrid" Grid.Row="1"><!-- I need my new rows here -->    </Grid></Grid>int i = 0; //nb of rows    private void AddLineButton_Click(object sender, RoutedEventArgs e)    {        Create_line();        i++;    }    private void Create_line()    {        RowDefinition gridRow = new RowDefinition();        gridRow.Height = new GridLength(1, GridUnitType.Star);        beGrid.RowDefinitions.Add(gridRow);        StackPanel stack = new StackPanel();        stack.Orientation = Orientation.Horizontal;        TextBlock textBlock = new TextBlock();        textBlock.Text = "Question";        textBlock.Name = "Test" + i.ToString();        stack.Children.Add(textBlock);        beGrid.Children.Add(stack);        Grid.SetRow(stack, i);    }我無法訪問以前創建的元素?;卮鸷螅?nbsp;   private void Create_line()    {        RowDefinition gridRow = new RowDefinition();        gridRow.Height = new GridLength(1, GridUnitType.Star);        beGrid.RowDefinitions.Add(gridRow);        StackPanel stack = new StackPanel();        stack.Orientation = Orientation.Horizontal;        TextBlock textBlock = new TextBlock();        textBlock.Text = "Question";        textBlock.Name = "Test" + i.ToString();        RegisterName(textBlock.Name, textBlock);        stack.Children.Add(textBlock);        beGrid.Children.Add(stack);        Grid.SetRow(stack, i);    }獲取創建的 TextBlock :var text = (TextBlock)FindName("Test"+i.ToString());
查看完整描述

2 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

您可以將所有創建的 StackPanel 存儲在列表中。


private void AddLineButton_Click(object sender, RoutedEventArgs e)

{

    Create_line();

}


List<StackPanel> items;


private void Create_line()

{

    RowDefinition gridRow = new RowDefinition();

    gridRow.Height = new GridLength(1, GridUnitType.Star);

    beGrid.RowDefinitions.Add(gridRow);


    StackPanel stack = new StackPanel();

    stack.Orientation = Orientation.Horizontal;


    int i = items.Count + 1;

    TextBlock textBlock = new TextBlock();

    textBlock.Text = "Question";

    textBlock.Name = "Test" + i.ToString();


    stack.Children.Add(textBlock);

    beGrid.Children.Add(stack);

    Grid.SetRow(stack, items.Count);


    items.Add(stack);

}

您可以通過索引訪問任何以前的面板,例如items[0],并從Children屬性獲取元素:items[0].Children[0] as TextBlock


查看完整回答
反對 回復 2023-09-24
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

像這樣手動創建控件確實不是 WPF 方式......

最好的方法是定義一個項目類,其中包含要顯示/編輯的每個值的屬性。

然后在窗口中創建ObservableCollection這些項目(因為您將在單擊按鈕時手動添加項目),并將其設置為控件ItemsSource的屬性ItemsControl。ADataTemplate用于定義精確的控件以顯示控件中的每個項目,該控件將綁定到該項目的屬性。


查看完整回答
反對 回復 2023-09-24
  • 2 回答
  • 0 關注
  • 135 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號