C# 如何在用户选择第一个网格后自动生成下一个网格

C# 如何在用户选择第一个网格后自动生成下一个网格,c#,wpf,xaml,C#,Wpf,Xaml,我想问一下如何自动生成包含标签和组合框的网格。我想要的是,一旦用户在comboBox 1中选择了一个选项,该方法将自动生成另一个网格(包含comboBox 2),依此类推 下面是我当前拥有的代码,现在我想创建一个事件驱动方法,在当前组合框中调用IsSelected后显示下一个网格 <Grid x:Name="comp1" Margin="0,84,230,345"> <Label Content="Test Component 1:" Horizont

我想问一下如何自动生成包含标签和组合框的网格。我想要的是,一旦用户在comboBox 1中选择了一个选项,该方法将自动生成另一个网格(包含comboBox 2),依此类推

下面是我当前拥有的代码,现在我想创建一个事件驱动方法,在当前组合框中调用IsSelected后显示下一个网格

 <Grid x:Name="comp1" Margin="0,84,230,345">
            <Label Content="Test Component 1:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
            <ComboBox x:Name="testCompCB1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Margin="134,4,0,0"/>
        </Grid>
        <Grid x:Name="comp2" Margin="0,127,230,302" Visibility="Hidden">
            <Label Content="Test Component 2:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
            <ComboBox x:Name="testCompCB2" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Margin="134,4,0,0"/>
        </Grid>
        <Grid x:Name="comp3" Margin="0,166,230,262" Visibility="Hidden">
            <Label Content="Test Component 3:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
            <ComboBox x:Name="testCompCB3" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Margin="134,5,0,0"/>
        </Grid>
        <Grid x:Name="comp4" Margin="0,205,230,222" Visibility="Hidden">
            <Label Content="Test Component 4:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
            <ComboBox x:Name="testCompCB4" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Margin="134,6,0,0"/>
        </Grid>
        <Grid x:Name="comp5" Margin="0,245,230,182" Visibility="Hidden">
            <Label Content="Test Component 5:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
            <ComboBox x:Name="testCompCB5" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Margin="134,6,0,0"/>
        </Grid>
        <Grid x:Name="comp6" Margin="0,281,230,145" Visibility="Hidden">
            <Label Content="Test Component 6:" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,3,0,0"/>
            <ComboBox x:Name="testCompCB6" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Margin="134,10,0,-3"/>
        </Grid>
        <Grid x:Name="comp7" Margin="0,328,230,100" Visibility="Hidden">
            <Label Content="Test Component 7:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
            <ComboBox x:Name="testCompCB7" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Margin="134,5,0,0"/>
        </Grid>
        <Grid x:Name="comp8" Margin="0,370,230,59" Visibility="Hidden">
            <Label Content="Test Component 8:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
            <ComboBox x:Name="testCompCB8" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Margin="134,3,0,0"/>
        </Grid>
        <Grid x:Name="comp9" Margin="0,406,230,15" Visibility="Hidden">
            <Label Content="Test Component 9:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
            <ComboBox x:Name="testCompCB9" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Margin="134,12,0,0"/>
        </Grid>

嗨,对于那些对此感兴趣的人,我使用以下简单的过程编码方法解决了这个问题

对于xaml:

<StackPanel x:Name="testCompList" HorizontalAlignment="Left" Height="274" Margin="10,92,0,0" VerticalAlignment="Top" Width="361">
            <Canvas x:Name="comp1" Margin="0,0,8,0" Height="26">
                <Label Content="Test Component 1:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <ComboBox x:Name="testComp1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Canvas.Left="134" Canvas.Top="5" DropDownClosed="addNewRow"/>
            </Canvas>
            <Canvas x:Name="comp2" Margin="0,0,8,0" Height="26" Visibility="Hidden">
                <Label Content="Test Component 2:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <ComboBox x:Name="testComp2" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Canvas.Left="134" Canvas.Top="5" DropDownClosed="addNewRow"/>
            </Canvas>
            <Canvas x:Name="comp3" Margin="0,0,8,0" Height="26" Visibility="Hidden">
                <Label Content="Test Component 3:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <ComboBox x:Name="testComp3" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Canvas.Left="134" Canvas.Top="5" DropDownClosed="addNewRow"/>
            </Canvas>
            <Canvas x:Name="comp4" Margin="0,0,8,0" Height="26" Visibility="Hidden">
                <Label Content="Test Component 4:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <ComboBox x:Name="testComp4" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Canvas.Left="134" Canvas.Top="5" DropDownClosed="addNewRow"/>
            </Canvas>
            <Canvas x:Name="comp5" Margin="0,0,8,0" Height="26" Visibility="Hidden">
                <Label Content="Test Component 5:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <ComboBox x:Name="testComp5" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Canvas.Left="134" Canvas.Top="5" DropDownClosed="addNewRow"/>
            </Canvas>
            <Canvas x:Name="comp6" Margin="0,0,8,0" Height="26" Visibility="Hidden">
                <Label Content="Test Component 6:" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Top="3"/>
                <ComboBox x:Name="testComp6" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Canvas.Left="134" Canvas.Top="5" DropDownClosed="addNewRow"/>
            </Canvas>
            <Canvas x:Name="comp7" Margin="0,0,8,0" Height="26" Visibility="Hidden">
                <Label Content="Test Component 7:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <ComboBox x:Name="testComp7" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Canvas.Left="134" Canvas.Top="5" DropDownClosed="addNewRow"/>
            </Canvas>
            <Canvas x:Name="comp8" Margin="0,0,8,0" Height="26" Visibility="Hidden">
                <Label Content="Test Component 8:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <ComboBox x:Name="testComp8" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Canvas.Left="134" Canvas.Top="5" DropDownClosed="addNewRow"/>
            </Canvas>
            <Canvas x:Name="comp9" Margin="0,0,8,0" Height="26" Visibility="Hidden">
                <Label Content="Test Component 9:" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <ComboBox x:Name="testComp9" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" IsEditable="True" Tag="Test Component" Canvas.Left="134" Canvas.Top="5"/>
            </Canvas>
        </StackPanel>

你能描述一下你的场景和用例吗?通常我会使用
ListBox
并创建一个
DataTemplate
作为
ListBox.itemtplate
来创建这样一个视图。嗨,我需要做的是每个类别的用户,这个类别可以有多个测试。所以对于a类,用户可以选择添加测试1、测试2、测试3等等。所以,当用户在测试1中选择了组合框1中的项目时,我需要自动生成包含组合框2的测试2。嗯,听起来有点奇怪,或者我不理解您的用例。实现一个AddItem视图(一个
列表框
,其中包含活动的选定测试和两个
按钮
,以便从
列表框
添加和删除测试,不是更好吗?您好,我解决了问题alr。非常感谢!
int i = 1;        
private void addNewRow(object sender, EventArgs e) //all will invoke this generic     method to display the visibility of the next
    {
        ComboBox selectedTest = (ComboBox)sender;
        Canvas thisRow = (Canvas)selectedTest.Parent;
        int index =Int32.Parse(thisRow.Name.Substring(thisRow.Name.Length-1, 1));
        if (thisRow is Canvas && index==i) //needs to ensure that only the previous canvas can invoke the next canvas once selection is done
        {
            i++;
            Canvas newRow = (Canvas)this.FindName("comp" + i);
            newRow.Visibility = Visibility.Visible;
            //add the test Component to a data structure like a list or something

        }

    }