按下按钮后,将UI元素动态添加到StackPanel



这是我在这里的第一个问题:)我不是专业程序员,我只有18岁,还没有上过大学,所以如果我说了一些愚蠢的话,请不要恨我:p

我正在制作(或者更确切地说,试图制作…)一个适用于Windows 10 UWP的应用程序,我的一段xaml代码看起来像这样:

<Grid Grid.Row="1" Grid.Column="1">
            <Grid.RowDefinitions>
                <RowDefinition Height="12"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="12"/>
            </Grid.RowDefinitions>
            <Rectangle Margin="0" Grid.Row="1" Fill="White" RadiusX="7" RadiusY="7"/>
            <Grid Grid.Row="1" Margin="12,6">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <StackPanel>
                        <TextBox x:Name="textProduct" Margin="0,6,6,6" TextWrapping="Wrap"  VerticalAlignment="Top" BorderBrush="#FFCECED2" FontFamily="Segoe UI Light" FontSize="17" PlaceholderText="Produkt..." BorderThickness="1"/>
                </StackPanel>
                <StackPanel Grid.Column="1">
                    <TextBox x:Name="textAdditionalInfo" Margin="6,6,0,6" TextWrapping="Wrap"  VerticalAlignment="Top" BorderBrush="#FFCECED2" FontFamily="Segoe UI Light" FontSize="17" PlaceholderText="Dodatkowe info..." BorderThickness="1"/>
                </StackPanel>
            </Grid>

我在底部还有一个应用程序栏,里面有"添加"one_answers"删除"按钮。我希望每次用户按下"添加"按钮时都能向两个StackPanel动态添加另一行TextBoxes,每次按下"删除"按钮时也能删除一行。不幸的是,我不知道如何做到这一点。我试图找到一个答案,我认为这可以通过使用UserControl来完成,但我不知道如何实现。

我希望这不会太复杂,因为我不想看到他们像一个要求别人为我做所有工作的人…

如果这是一个大问题,那么它甚至不需要支持删除TextBoxes。

我希望你明白我的意思。我不是以英语为母语的,所以很抱歉有任何错误;)

欢迎使用XAML,值得花时间学习!

为了显示数据,XAML有一种叫做DataBinding的智能东西。一般概念是将List(例如,要在StackPanel中显示的所有strings)绑定到视图中的元素。现在,每当修改该列表时,视图都会自动调整。StackPanel不支持绑定,但例如ListView支持(如下所示)

关于数据绑定的基本信息,你可以看看这个:https://blogs.msdn.microsoft.com/jerrynixon/2012/10/12/xaml-binding-basics-101/

考虑到这一点,你可以做这样的事情:

<!-- insert at the top -->
<Page.Resources>
    <DataTemplate x:Name="MyDataTemplate">
        <TextBlock Text="{Binding } />
    </DataTemplate>
</Page.Resources>
<!-- insert where you want the list to appear -->
<ListView x:Name="ListView" ItemTemplate="{StaticResource MyDataTemplate}" ItemsSource="{Binding MyCollection}" />

对你来说,唯一困难的部分是将列表绑定到ListView,但我相信你可以通过上面的教程来完成;)

提醒您,您可以用x:Key="MyStack"命名您的StackPanel,并手动添加项目:

MyStack.Children.Add(new TextBlock() {Text = "myText"});

然而,我真的可以建议您使用DataBinding方法,因为它可以在更大的项目中更容易地与UI交互。

最新更新