2016-04-16 66 views
2

这是我的第一个问题:) 我不是一个专业的程序员,我只有18岁,我没有在大学或其他任何学习,所以请不要恨我,如果我说了一些愚蠢的:p按下按钮后动态添加UI元素到StackPanel

我做(或者说试图使...)为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,并在每次点击“删除”按钮时删除一行。不幸的是,我不知道如何做到这一点。我试图找到答案,我认为这可以通过使用UserControl完成,但是我不知道如何实现这一点。

我希望这不是太comlicated做,因为我不想seeem一样,要求别人做我的工作,我一个人......

如果它是一个很大的问题,那么它甚至不需要支持删除文本框。

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

+1

使用stackpanelname.childrens.add(你的文本框名称)它将控制添加到你的堆栈面板。 –

回答

5

欢迎来到XAML,这非常值得我们学习!

对于显示数据XAML有一些天才叫做DataBinding。一般概念是,您将一个列表(例如,您想在您的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,但我敢肯定,你可以从上面的教程做;)

Alernatively,你能说出你的StackPanelx:Key="MyStack",和手动添加项目:

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

不过,我真的建议你做DataBinding方法,因为它使得在更大的项目与UI容易得多互动