2016-10-04 3 views
0

몇 가지 입력란이있는 일반적인 edit form (user control)입니다. ListBox이 현재 포커스가있는 TextBox 바로 아래에 표시되어야하므로 동적으로 이동해야합니다. 는 좀 바인딩했지만, 아무것도 당신에게 당신이 원하는 위치를 표시하는 기능을 제공으로현재 포커스가있는 컨트롤 옆에 WPF 컨트롤을 배치하는 방법은 무엇입니까?

<local:MyList x:Name="myList" 
     Canvas.Left="{Binding (FocusManager.FocusedElement).Canvas.Left,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" 
     Canvas.Top="{Binding (FocusManager.FocusedElement).Canvas.Bottom,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" 
/> 

답변

1

Popup를 사용하여 발생하지 않습니다. Placement = Bottom은 정확히 PlacementTarget 아래에 표시됩니다.

핸들 GotFocus 및 .

 <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="10,19,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" GotFocus="TextBox_GotFocus_1" LostFocus="TextBox_LostFocus_1"/> 
     <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="10,57,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" GotFocus="TextBox_GotFocus_1" LostFocus="TextBox_LostFocus_1"/> 
     <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="10,96,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/> 
     <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="10,136,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" GotFocus="TextBox_GotFocus_1" LostFocus="TextBox_LostFocus_1"/> 
     <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="10,174,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/> 

     <Popup Placement="Bottom" x:Name="LsbPopup"> 
      <ListBox> 
       <ListBoxItem>item1</ListBoxItem> 
       <ListBoxItem>item1</ListBoxItem> 
       <ListBoxItem>item1</ListBoxItem> 
       <ListBoxItem>item1</ListBoxItem> 
       <ListBoxItem>item1</ListBoxItem> 
       <ListBoxItem>item1</ListBoxItem> 
       <ListBoxItem>item1</ListBoxItem> 
      </ListBox> 
     </Popup> 

핸들러 :

private void TextBox_GotFocus_1(object sender, RoutedEventArgs e) 
{ 
    LsbPopup.PlacementTarget = sender as TextBox; 
    LsbPopup.IsOpen = true; 
} 

private void TextBox_LostFocus_1(object sender, RoutedEventArgs e) 
{ 
    LsbPopup.IsOpen = false; 
} 
+0

내가 "팝업"을 몰랐 감사합니다 .... 존재! –