[英]Dynamically add UI elements to StackPanel after button pressed
这是我在这里的第一个问题:)我不是一个专业的程序员,我只有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>
我的底部还有一个应用栏,带有添加和删除按钮。 我希望每次用户按下“添加”按钮时都能向两个StackPanel动态添加另一行TextBox,并在每次按下“删除”按钮时删除一行。 不幸的是,我不知道如何实现这一目标。 我试图找到答案,我认为这可以通过使用UserControl完成,但我不知道如何实现这一点。
我希望这不是太复杂,因为我不希望看到像一个人要求其他人为我做我所有的工作......
如果这是一个大问题,那么它甚至不需要支持删除TextBoxes。
我希望你明白我的意思。 我不是英国人,对任何错误都很抱歉;)
欢迎来到XAML,值得花时间学习它!
为了显示数据,XAML有一些聪明的东西叫做DataBinding。 一般概念是将List(例如,您希望在StackPanel
显示的所有strings
绑定到视图中的元素。 现在,无论何时修改该列表,视图都会自动适应。 StackPanel
不支持Binding,但是例如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的交互变得更加容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.