如何删除在运行时创建的选定文本框

时间:2016-05-30 01:41:42

标签: c# wpf

我有一个WPF应用程序,它有两个按钮 - 添加和删除。添加按钮以编程方式在运行时在gui中的特定网格中添加文本框,文本框名称也将在运行时分配。我想删除按钮删除在运行时从gui生成的选定文本框。我不知道删除文本框的方法,除非我知道文本框的名称,我不知道该怎么办。我甚至会感激一点指导。我是WPF的新手,我相信我应该错过一些明显的内容。

提前致谢。

2 个答案:

答案 0 :(得分:3)

如果你正在使用MVVM(你应该在WPF中),你可以这样做:

  1. 在ViewModel中,公开包含您需要显示TextBoxes的业务对象(例如ObservableCollection<T>)的公共User
  2. 在用户界面中,添加ItemsControl并将其绑定到ObservableCollection
  3. 定义DataTemplate,将业务对象转换为TextBoxes,并将TextBox属性绑定到业务对象成员。
  4. 在ViewModel中实施AddRemove RelayCommands
  5. 使用这些命令绑定“添加”和“删除”按钮。
  6. 这将使您远离繁琐的步行视觉树并找到合适的文本框等。

答案 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);
        }
    }  

<强> 输出

Gird Childeren

以上是您可以采用的非常基本的WPF方法,但我非常建议您研究MVVM模式以便于逻辑分离和灵活性(如@dotNEt在其答案中建议的那样)。