Всплывающее окно WPF с текстовым полем?

#c# #wpf

#c# #wpf

Вопрос:

Я пытаюсь создать элемент управления, который отображает результаты поиска, когда пользователь вводит что-то в текстовое поле. Для этого у меня есть текстовое поле и всплывающее окно, которое появляется, когда пользователь вводит в него что-то (точно так же, как в окне поиска Google). Вот так,

 <Grid> <TextBox Name="userEntry" /> <Popup /> </Grid>
  

Теперь, когда пользователь начинает вводить текст в текстовое поле, я хочу, чтобы всплывающее окно отображалось и оставалось открытым до тех пор, пока пользователь не сосредоточится на каком-либо другом элементе управления пользовательского интерфейса или если введенный текст пуст.
Я не могу легко добиться этого, и мне было интересно, есть ли альтернативные лучшие способы сделать это в wpf.
С уважением

Комментарии:

1. Альтернатива чему? Вы не указали свой путь, так как мы можем узнать, какая альтернатива?

2. Я сделал… Мне нужна была возможность поиска, подобная Google, в которой я набираю что-то в текстовом поле, я показываю всплывающее окно прямо под ним, в котором перечислены результаты .. но у меня возникли проблемы с проблемами фокусировки и т. Д. … другая альтернатива, которую я рассматриваю, — это … рестайлинг выпадающего списка для достижения чего-то подобного.

Ответ №1:

XAML :

   <Window>
     <Grid>
        <Grid.RowDefinitions>
             <RowDefinition />
             <RowDefinition />
        </Grid.RowDefinitions>

        <Button x:Name="btn" Content="Open Search Window"  Height="30" Width="150" Click="btn_Click"/> 

        <Popup x:Name="popup"  PlacementTarget="{Binding ElementName=btn}" Placement="Bottom"  Width="200" Height="100" Margin="0,20,0,0">
           <Border BorderBrush="Black" BorderThickness="2" Background="AliceBlue">
               <TextBox x:Name="txtBox" VerticalAlignment="Center" Margin="15,0,15,0"/> 
           </Border>
        </Popup>

        <TextBox x:Name="focusTarger" Text="Focus Me !" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="200" TextAlignment="Center" FontSize="16"/>

    </Grid> 
  </Window>
  

CS :

 public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        GotFocus  = MainWindow_GotFocus;
    }

    void MainWindow_GotFocus(object sender, RoutedEventArgs e)
    {
        FrameworkElement element = (FrameworkElement)e.OriginalSource;

        if (txtBox == element || popup == element || element.Parent == popup)
            return;

        popup.IsOpen = !string.IsNullOrEmpty(txtBox.Text);
    }

    private void btn_Click(object sender, RoutedEventArgs e)
    {
        popup.IsOpen = true;
    }
}
  

Комментарии:

1. Спасибо, Эран! Позвольте мне попробовать это и посмотреть.