3

这是我在这里的第一个问题 :) 我不是专业程序员,我只有 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>

我在底部还有一个带有添加和删除按钮的应用栏。我希望能够在用户每次按下“添加”按钮时动态地将另一行 TextBoxes 添加到两个 StackPanel 中,并在每次用户按下“删除”按钮时将其删除。不幸的是,我不知道如何实现这一目标。我试图找到答案,我认为这可以通过使用 UserControl 来完成,但是我不知道如何实现这一点。

我希望这不会太复杂,因为我不想看起来像一个要求其他人为我完成所有工作的人......

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

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

4

1 回答 1

11

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

为了显示数据,XAML 有一个称为 DataBinding 的智能功能。一般概念是您将一个列表(例如strings您想要在您的 中显示的所有内容StackPanel)绑定到视图中的一个元素。现在,无论何时修改该列表,视图都会自动适应。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,但我相信您可以使用上面的教程来做到这一点;)

或者,您可以StackPanel使用命名x:Key="MyStack",并手动添加项目:

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

但是,我真的可以推荐你使用这种DataBinding方法,因为它使在更大的项目中与 UI 交互变得更加容易。

于 2016-04-16T10:55:57.567 回答