2016-04-23 2 views
0

Как упоминалось в названии, я хочу, чтобы всплывающее окно показывало, когда текстовое поле получает фокус клавиатуры, а затем закрывается, когда пользователь щелкает за пределами всплывающего окна (это делается через staysopen = false).Открывать всплывающее окно, когда текстовое поле имеет фокус клавиатуры и закрывается с помощью свойства «staysopen = false»

Как вы можете видеть по приведенному ниже коду, я связал имущество IsOpen с объектом IsKeyboardFocused объекта ExampeTextBox. Это работает для открытия всплывающего окна, но не позволяет мне взаимодействовать со всплывающим окном, так как я вызываю Keyboard.ClearFocus(); в событие щелчка, которое вызывается, когда пользователь нажимает в любом месте окна. Это означает, что нажатие в любом месте за пределами текстового поля вызывает Keyboard.ClearFocus(), в результате чего текстовое поле потеряет фокус клавиатуры.

Если установить StaysOpen = false, а затем установить IsOpen программно через Popup.IsOpen = true; он вызывает от свойств IsOpen и StaysOpen конфликта и всплывающее окно не будет отображаться на всех.

  <Popup 
      x:Name="ExamplePopup" 
      Placement="Bottom" 
      PlacementTarget="{Binding ElementName=ExampleTextBox}" 
      IsOpen="{Binding ElementName=ExampleTextBox, Path=IsKeyboardFocused, Mode=OneWay}">...</Popup> 

Here is a screen recording of my problem.

Любая помощь очень ценится спасибо.

+0

Почему бы не использовать текстовое поле автозаполнения вместо обычного текстового поля. Похоже, вы хотите показать поисковые предложения в своем всплывающем окне – Jerin

+0

, что вы делаете, используя всплывающее окно точно? –

ответ

1

Вы можете связать IsOpen с boolean, что делает ваш popup видимым или нет.

<Popup 
      x:Name="ExamplePopup" StaysOpen="True" 
      Placement="Bottom" 
      PlacementTarget="{Binding ElementName=ExampleTextBox}" 
      IsOpen="{Binding IsNeedToOpen}"> 
    </Popup> 

Когда textbox получает focus установить значение trueproperty и когда вам нужно близко всплывающее окно установлено значение falseproperty. Убедитесь, что вы внедрили INotifyPropertyChangedinterface и установить DataContext.

private bool _IsNeedToOpen = false; 
    public bool IsNeedToOpen 
    { 
     get { return _IsNeedToOpen; } 
     set 
     { 
      if (_IsNeedToOpen == value) { return; } 
      _IsNeedToOpen = value; 
      OnPropertyChanged("IsNeedToOpen"); 
     } 
    } 
    private void TextBox_GotKeyboardFocus(object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e) 
    { 
     IsNeedToOpen = true; 
    } 
Смежные вопросы