正如标题中所提到的,当文本框获得键盘焦点时,我希望弹出窗口显示,但是当用户在弹出窗口外单击时关闭(通过staysopen = false完成)。
正如您在下面的代码中看到的,我已将IsOpen
属性绑定到ExampeTextBox的IsKeyboardFocused
属性。这适用于打开弹出窗口,但阻止我与弹出窗口进行交互,因为我在用户单击窗口上的任何位置时调用的单击事件中调用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 :(得分:1)
您可以将IsOpen
绑定到boolean
属性,使popup
可见或不可见。
<Popup
x:Name="ExamplePopup" StaysOpen="True"
Placement="Bottom"
PlacementTarget="{Binding ElementName=ExampleTextBox}"
IsOpen="{Binding IsNeedToOpen}">
</Popup>
当您的textbox
获得focus
设置property
值true
时,当您需要关闭弹出窗口时,请设置property
值false
。确保您实施 INotifyPropertyChanged
interface
并设置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;
}