我有一个WPF应用程序,它有两个按钮 - 添加和删除。添加按钮以编程方式在运行时在gui中的特定网格中添加文本框,文本框名称也将在运行时分配。我想删除按钮删除在运行时从gui生成的选定文本框。我不知道删除文本框的方法,除非我知道文本框的名称,我不知道该怎么办。我甚至会感激一点指导。我是WPF的新手,我相信我应该错过一些明显的内容。
提前致谢。
答案 0 :(得分:3)
如果你正在使用MVVM(你应该在WPF中),你可以这样做:
ObservableCollection<T>
)的公共User
。ItemsControl
并将其绑定到ObservableCollection
。DataTemplate
,将业务对象转换为TextBoxes,并将TextBox属性绑定到业务对象成员。Add
和Remove
RelayCommands
。这将使您远离繁琐的步行视觉树并找到合适的文本框等。
答案 1 :(得分:1)
以下是在Grid
中添加和删除元素的基本演示:
<强> XAML: 强>
<Window x:Class="TabControl.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TabControl"
Title="MainWindow" Height="300" Width="300"
xmlns:Interact="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}"
>
<ScrollViewer VerticalScrollBarVisibility="Visible">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<Button Content="Add New Box" Click="Button_Click" />
<Button Content="Remove Selected Box" PreviewMouseLeftButtonDown="Button_PreviewMouseLeftButtonDown" />
</StackPanel>
<Grid x:Name="mygrid">
</Grid>
</StackPanel>
</ScrollViewer>
<强> 活动: 强>
private void Button_Click(object sender, RoutedEventArgs e)
{
var textBox=new TextBox();
mygrid.RowDefinitions.Add(new RowDefinition());
textBox.Name = "textBox" + mygrid.RowDefinitions.Count;
textBox.SetValue(Grid.RowProperty, mygrid.RowDefinitions.Count);
mygrid.Children.Add(textBox);
}
private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var focusedElement = Keyboard.FocusedElement;
if (focusedElement is TextBox)
{
mygrid.Children.Remove(focusedElement as UIElement);
}
}
<强> 输出 强>
以上是您可以采用的非常基本的WPF方法,但我非常建议您研究MVVM
模式以便于逻辑分离和灵活性(如@dotNEt在其答案中建议的那样)。