C# 如何使用WrapPanel在WPF中移动文本框旁边的按钮

C# 如何使用WrapPanel在WPF中移动文本框旁边的按钮,c#,wpf,C#,Wpf,我是WPF的新手。我有一个按钮。我想创建动态文本框。当我关注动态文本框时,按钮会移到文本框旁边。我不知道怎么做。请帮帮我 <Grid Name="mymy" HorizontalAlignment="Left" Height="243" Grid.Column="0" Grid.Row="0" VerticalAlignment="Top" Width="263" Margin="462,105,0,0" Grid.RowSpan="2" > <Grid.Ro

我是WPF的新手。我有一个按钮。我想创建动态文本框。当我关注动态文本框时,按钮会移到文本框旁边。我不知道怎么做。请帮帮我

 <Grid Name="mymy" HorizontalAlignment="Left" Height="243" Grid.Column="0" Grid.Row="0" VerticalAlignment="Top" Width="263" Margin="462,105,0,0" Grid.RowSpan="2" >
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <WrapPanel Grid.Column="1" x:Name="abc" HorizontalAlignment="Left" Height="232" Margin="0,0,-250,-218" VerticalAlignment="Top" Width="262" Grid.Row="1"/>
 </Grid>
    <!--<DockPanel Name="mymy1" HorizontalAlignment="Left" Height="191" LastChildFill="True" Margin="424,94,0,0" VerticalAlignment="Top" Width="282" Grid.RowSpan="2"/>-->
欢迎来到SO。 考虑这两件事:

  • 在运行时更改网格的布局(我所说的布局是指行和列)是一个极坏的习惯
  • 就像你在网格中设置文本框的位置一样,你也可以在网格中设置按钮。您只需要在head之前创建它所需的行和列
  • 我的意见是,应该有一个堆栈布局,动态地向其中添加控件。然后,该控件可以是自定义控件,由带有文本框的网格和按钮的位置组成(也可以是可以通过属性隐藏或可见的按钮)

    如果您喜欢我的想法,请参阅了解如何创建自定义控件

     private void button_Click(object sender, RoutedEventArgs e)
        {
            txtSource = new TextBox();
            txtSource.MinHeight = 15;
            txtSource.Width = 100;
            txtSource.Height = 25;
            txtSource.Name = "txtSource";
    
            //Binding txtBinding = new Binding("PurchaseOrder.PickupSrcCodeName"); /*txtBinding.Mode = BindingMode.OneWay;*/
    
            //txtSource.SetBinding(TextBox.TextProperty, txtBinding);
    
            ColumnDefinition colDef1;
            colDef1 = new ColumnDefinition();
            mymy.ColumnDefinitions.Add(colDef1);
    
            RowDefinition rowDef1;
            rowDef1 = new RowDefinition();
            mymy.RowDefinitions.Add(rowDef1);
            ++count;
    
            abc.Children.Add(txtSource);
    
    
            Grid.SetColumn(txtSource, count);
            Grid.SetRow(txtSource, 0);
            txtSource.GotFocus += t_GotFocus;
            txtSource.TextChanged += this.t_TextChanged;
          }
    
        private void t_TextChanged(object sender, RoutedEventArgs e)
        {
            button.Visibility = Visibility.Visible;
    
        }