我目前正在代码中添加控件,然后走可视树来检索值。
<StackPanel Name="StackPanel1/>
Dim _TextBox As New TextBox()
StackPanel1.children.insert(index, _TextBox)
有一个按钮单击事件,可以由用户向堆栈面板添加其他文本框。
我认为itemscontrol会更有说服力,更适合MVVM模式。我不确定设置此项的最佳方法,允许用户删除面板中任何给定索引处的文本框。难道你还不需要走树来获取他们选择删除的控件的相应索引吗?目前,随着控件的添加,控件旁边会添加一个删除按钮。然后我可以走树并获得索引。
答案 0 :(得分:0)
一种方法是在DataTemplate
上使用ItemsControl
(就像你说的那样),DataTemplate
可以附加删除按钮以从{{1}中删除自己}}。
这只是一个简单的示例,您应该实现ItemsControl
而不是我添加的事件处理程序
示例代码在c#中,但它非常简单,我相信你可以很容易地转换它
的Xaml:
CommandBindings
代码:
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="400" Name="UI" >
<Window.Resources>
<DataTemplate x:Key="itemTemplate" >
<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtbx" Text="{Binding Value}" HorizontalAlignment="Left" Width="175" />
<Button Content="X" Width="{Binding ElementName=txtbx, Path=ActualHeight}" HorizontalAlignment="Right" Click="Button_Click" Tag="{Binding}" />
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ItemsControl ItemTemplate="{StaticResource itemTemplate}" Name="itemsControl" ItemsSource="{Binding ElementName=UI, Path=Models}" Margin="0,40,0,0" />
<Button Content="Add" Height="23" HorizontalAlignment="Left" Margin="3,8,0,0" Name="Button_Add" VerticalAlignment="Top" Width="75" Click="Button_Add_Click" />
</Grid>
</Window>