2016-07-13 2 views
0

Получил немного застрял и мог использовать некоторую помощь. Чтобы достичь: всякий раз, когда вы нажимаете за пределы StackPanel - это Visibilty должно измениться на Hidden.LostFocus не стреляет

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

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" > 

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

Итак, вопрос в том, чего мне не хватает? Причина, когда это выглядит так: щелчок за пределами панели не дает никакой реакции.

+1

первоначально она спрятана то, как он получил фокус? –

+0

Получает изменение свойства при нажатии: private void btnLeftMenuShow_Click (отправитель объекта, RoutedEventArgs e) { pnlLeftMenu.Visibility = Visibility.Visible; } –

+0

Кроме того, я просто попытался сфокусироваться: private void btnLeftMenuShow_Click (отправитель объекта, RoutedEventArgs e) { pnlLeftMenu.Visibility = Visibility.Visible; pnlLeftMenu.Focus(); } –

ответ

1

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

if (pnlLeftMenu.IsVisible) 
    { 
     pnlLeftMenu.Visibility = Visibility.Hidden; 
    } 
+0

Отличное мышление! Это сработало, спасибо, сэр. –