如何使弹出窗口包含在它的父控件中以用于鼠标事件?



我有一个包含Popup的控件。每当有人在控件之外单击时,我都会尝试关闭弹出菜单。这是我的代码中设置问题的部分:

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

现在,每当我单击弹出菜单时,它都会引发PreviewMouseDownOutsideCapturedElementEvent。我是不是误解了这个事件?我能做些什么让Popup被视为控件的一部分,这样它就不会引发这个事件吗?

这行得通吗?

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

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

将XAML代码放在.XAML页面中,将C#代码放在相关的.XAML.cs文件中。

注意:在这之前,你可能需要将焦点放在弹出窗口上,它可能会自动完成;我没有在弹出窗口上做过,但我在其他对象上做过。

更新:这对我来说很有效,点击显示Test1的TextBox打开弹出菜单,点击标记为Test2的TextBox关闭弹出菜单:

<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;
}

最新更新