LostFocus не срабатывает

Немного застрял и может понадобиться помощь. Для достижения: всякий раз, когда щелкайте за пределами StackPanel, его видимость должна измениться на скрытую.

Довольно просто, я написал следующее условие:

private void pnlLeftMenu_LostFocus(object sender, RoutedEventArgs e)
    {
        if (pnlLeftMenu.IsFocused == false)
        {
            pnlLeftMenu.Visibility = Visibility.Hidden;
        }
    }

Где pnlLeftMenu — панель, которая должна срабатывать. Вот кусок xaml с описанными свойствами:

    <StackPanel x:Name="pnlLeftMenu"                    
                Orientation="Vertical" 
                Height="475" 
                HorizontalAlignment="Left" 
                VerticalAlignment="Bottom"
                Margin="57,0,0,0"
                Visibility="Hidden"
                Background="{StaticResource BlueFadedBrush}" 
                IsVisibleChanged="pnlLeftMenu_IsVisibleChanged" 
                Focusable="True"
                LostFocus="pnlLeftMenu_LostFocus" >

Не беспокойтесь о том, что оно уже скрыто - это боковое меню, которое становится видимым по нажатию кнопки. Эта часть работает нормально.

Так вот вопрос: что я упускаю? Потому что когда это выглядит так - щелчок снаружи панели не вызывает никакой реакции.


person Egor Osaulenko    schedule 13.07.2016    source источник
comment
изначально он скрыт, то как он получил фокус?   -  person sujith karivelil    schedule 13.07.2016
comment
Получает изменение свойства при щелчке: private void btnLeftMenuShow_Click (отправитель объекта, RoutedEventArgs e) { pnlLeftMenu.Visibility = Visibility.Visible; }   -  person Egor Osaulenko    schedule 13.07.2016
comment
Кроме того, я только что попытался установить фокус: private void btnLeftMenuShow_Click(object sender, RoutedEventArgs e) { pnlLeftMenu.Visibility = Visibility.Visible; pnlLeftMenu.Focus(); }   -  person Egor Osaulenko    schedule 13.07.2016


Ответы (1)


можете ли вы добавить событие щелчка в родительский контейнер панели стека и внутри обработчика события щелчка попробуйте

   if (pnlLeftMenu.IsVisible)
    {
        pnlLeftMenu.Visibility = Visibility.Hidden;
    }
person Joseph    schedule 13.07.2016