Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建包含在其中的弹出窗口';为了鼠标事件,是否使用了父控件?_C#_Wpf - Fatal编程技术网

C# 如何创建包含在其中的弹出窗口';为了鼠标事件,是否使用了父控件?

C# 如何创建包含在其中的弹出窗口';为了鼠标事件,是否使用了父控件?,c#,wpf,C#,Wpf,我有一个包含弹出窗口的控件。我试图关闭弹出窗口时,有人点击以外的控制。这是我的代码中设置问题的部分: AddHandler(Mouse.PreviewMouseDownOutsideCapturedElementEvent, new MouseuttonEventHandler(HandleOutsideClick), true); 现在,每当我在弹出窗口中单击时,都会引发PreviewMouseDownOutsideCapturedElementEvent。我是不是误解了这件事?我是否可以将

我有一个包含弹出窗口的控件。我试图关闭弹出窗口时,有人点击以外的控制。这是我的代码中设置问题的部分:

AddHandler(Mouse.PreviewMouseDownOutsideCapturedElementEvent, new MouseuttonEventHandler(HandleOutsideClick), true);
现在,每当我在弹出窗口中单击时,都会引发PreviewMouseDownOutsideCapturedElementEvent。我是不是误解了这件事?我是否可以将弹出窗口视为控件的一部分,这样它就不会引发此事件

这有用吗

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


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

私有void ClosePop(对象发送方,路由目标)
{
Pop.Visibility=Windows.UI.Xaml.Visibility.Collapsed;
}
将XAML代码放在.XAML页面中,将C#代码放在相关的.XAML.cs文件中

注意:您可能需要将焦点放在弹出窗口上,然后才能工作,这可能会自动完成;我没有在弹出窗口上这样做,但我已经在其他对象上这样做了

更新:这对我来说很有效,单击显示Test1的文本框打开弹出窗口,单击标记为Test2的文本框关闭弹出窗口:

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

测试1
测试2
砰!
私有void ClosePop(对象发送方,路由目标)
{
Pop.IsOpen=false;
}
私有void OpenPop(对象发送方,路由目标)
{
Pop.IsOpen=真;
}

尝试使用LostFocus方法,并在名为的方法中以编程方式关闭它。我在弹出窗口中附加了一个文本框,文本框输入过滤弹出项目。当我在整个控件之外单击时,我正试图关闭弹出窗口。我不确定在那种情况下我如何恰当地给出弹出窗口的焦点。嗯,你在桌面WPF中吗?我可以尝试构建一些东西并解决它,但是桌面WPF与Windows应用商店WPF不同,所以我需要知道您正在使用哪个。是的,我在桌面WPF中。这在我描述的上下文中确实有效。我意识到我一直在以错误的方式处理我的特定解决方案,并对其进行了修改。