borgs0
borgs0

Reputation: 43

How do I make a Popup included in it's parent Control for the sake of mouse events?

I have a Control that contains a Popup. I am trying to close the Popup whenever someone clicks outside of the Control. This is the part of my code that sets up the problem:

AddHandler(Mouse.PreviewMouseDownOutsideCapturedElementEvent, new MouseuttonEventHandler(HandleOutsideClick), true);

Now whenever I click in the Popup it causes PreviewMouseDownOutsideCapturedElementEvent to be raised. Am I misunderstanding this event? Is there something that I can do to have the Popup be considered a part of the Control so that it doesn't raise this event?

Upvotes: 4

Views: 232

Answers (1)

user2509848
user2509848

Reputation:

Does this work?

<Popup Name="Pop" LostFocus="ClosePop"/>


private void ClosePop(object sender, RoutedEventArgs e)
{
  Pop.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
}

Put the XAML code in your .xaml page and the C# code in the related .xaml.cs file.

Note: You may need to put the focus on the popup before this works, it may be done automatically; I haven't done this on popups, but I have done it on other objects.

Update: This works for me, clicking in the TextBox that says Test1 opens the Popup, and clicking in the TextBox labeled Test2 closes it:

<Grid Background="White">

  <StackPanel>
    <TextBox Foreground="Black" LostFocus="ClosePop" GotFocus="OpenPop" Height="50">Test1</TextBox>
    <TextBox Foreground="Black" Height="50">Test2</TextBox>
  </StackPanel>
  <Popup Name="Pop" Height="50" Width="50">
    <TextBlock Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center">Pop!</TextBlock>
  </Popup>
</Grid>

private void ClosePop(object sender, RoutedEventArgs e)
{
  Pop.IsOpen = false;
}

private void OpenPop(object sender, RoutedEventArgs e)
{
  Pop.IsOpen = true;
}

Upvotes: 1

Related Questions