2016-04-16 63 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容易得多互動