在做一个自定义的输入搜索框,用textbox+popup来实现。其中有一个小需求,当textbox激活并且没有文本输入的时候,也要显示popup。很自然的想到了使用IsKeyboardFocusedChanged事件
private void input_IsKeyboardFocusedChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue.Equals(true))
{
if (input.Text.Length == 0)
pop.IsOpen = true;
}
}
但是运行的时候发现,popup控件不能正常弹出,被这个问题缠住了好久。于是监控了popup的Closed事件,发现popup弹出后立即被关闭了。
查看了相关内容,发现popup控件有一个内部行为
private static void OnLostMouseCapture(object sender, MouseEventArgs e)
{
Popup popup = sender as Popup;
if (!popup.StaysOpen)
{
PopupRoot root = popup._popupRoot.Value;
bool reestablishCapture = e.OriginalSource != root && Mouse.Captured =