2016-11-14 1 views
-1

WPF를 처음 사용합니다. 나는 Button을 가지고있다. Dynamic textBoxes를 만들고 싶다. 동적 인 text box에 초점을 맞추었을 때, text box 옆에있는 버튼으로 이동한다. 나는 이것을 어떻게하는지 모른다. SO 나WrapPanel을 사용하여 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"/>--> 

.cs 코드

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; 

    } 

enter image description here

답변

0

에 오신 것을 환영에 도움을 주시기 바랍니다. 이 두 가지를 고려 : 그것은 런타임에 그리드의 레이아웃을 변경하는 매우 나쁜 습관

  1. 을 (내가 행과 열을 의미 레이아웃에 의해)
  2. 당신이 당신의 텍스트 상자 위치를 설정 그냥 같은 방법으로 그리드에서 단추를 배치 할 수 있습니다. 당신은 단지 머리를하기 전에 그것에 필요한 행과 열을 만들어야합니다.

제 생각에는 여기에 동적으로 컨트롤을 추가하는 스택 레이아웃이 있어야합니다. 이 컨트롤은 텍스트 상자가있는 격자와 단추가있는 격자로 구성된 사용자 정의 컨트롤이 될 수 있습니다 (또는 속성을 통해 숨기거나 표시 할 수있는 버튼 일 수도 있음)

내 아이디어가 마음에 드시면 this을 참조하십시오. 사용자 지정 컨트롤을 만들 수 있습니다.

관련 문제