C# 如果点击其他任何位置,Windows Phone关闭弹出窗口

C# 如果点击其他任何位置,Windows Phone关闭弹出窗口,c#,popup,windows-phone,C#,Popup,Windows Phone,我有一个目前正在开发的Windows Phone应用程序,我的共享按钮打开一个带有多个选项的小弹出窗口,使用以下代码: private void share_Click(object sender, System.EventArgs e) { Popup share= new Popup(); share.Child = new sharePopup(); share.IsOpen = true; shar

我有一个目前正在开发的Windows Phone应用程序,我的共享按钮打开一个带有多个选项的小弹出窗口,使用以下代码:

       private void share_Click(object sender, System.EventArgs e) 
    {

        Popup share= new Popup();
        share.Child = new sharePopup();
        share.IsOpen = true;
        share.VerticalOffset = 30;
        share.HorizontalOffset = 0;
    }
现在,这个弹出窗口有一个“关闭”按钮,但是如果我不点击它,而是点击上一个仍然可见的页面上的另一个按钮,即使在移动到新页面后,弹出窗口仍然保持不变。我必须单击“关闭”,弹出窗口才能消失

我要寻找的是,如果我点击弹出窗口之外的任何地方,弹出窗口就会关闭。是否有预定义的方法来执行此操作?如果没有,我该怎么做

提前谢谢

编辑:这是弹出窗口的c代码

      public partial class sharePopup : UserControl
{
    public sharePopup()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {            
        Popup mensaje = this.Parent as Popup;
        mensaje.IsOpen = false;
    }
      private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        this.Focus();
    }

    private void UserControl_LostFocus(object sender, RoutedEventArgs e)
    {
        Popup mensaje = this.Parent as Popup;
        mensaje.IsOpen = false;
    }
}
}

弹出窗口的XAML仅包含大小、颜色和按钮定义:

<UserControl x:Class="MSPinTrainingApp.sharePopup"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
d:DesignHeight="480" d:DesignWidth="480"
Width="480" Height="200" >

<Grid x:Name="LayoutRoot" LostFocus="LayoutRoot_LostFocus">
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.Background>
        <SolidColorBrush Color="{StaticResource PhoneChromeColor}"/>
    </Grid.Background>
    <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
               Margin="3" x:Name="txtMensaje" Text="Compartir:" LostFocus="txtMensaje_LostFocus" />
    <Image Margin="70,60,335,62" Source="appbar.email.hardedge.png" Stretch="Fill" Tap="Image_Tap_1"/>
    <Image Margin="200,60,200,62" Source="appbar.facebook.png" Stretch="Fill" Tap="Image_Tap_2"/>
    <Image Margin="335,60,70,62" Source="appbar.twitter.bird.png" Stretch="Fill" Tap="Image_Tap_3"/>
    <Image Margin="430,-12,11,134" Source="/appbar.close.png" Width="50" Tap="Image_Tap_4"/>
</Grid>


您可以尝试处理UIElement的事件。在弹出窗口中调用OnLostFocus处理程序时,请关闭弹出窗口(关闭自身)。

您可以尝试处理UIElement的事件。当在弹出窗口中调用OnLostFocus处理程序时,关闭弹出窗口(关闭自身)。

在经历了大量失败的实验后,我找到了Coding4Fun工具包,并能够使用其消息提示符创建一个正常工作的弹出窗口。
该工具包可以在

上找到。在经历了大量失败的实验之后,我环顾了一下网络,发现了Coding4Fun工具包,并能够用它的消息提示符弹出一个工作窗口。
工具包可在

上找到,我发现在声明
弹出式
控件时,只要设置
IsLightDismissEnabled=“True”
就很有用了。

我发现在声明
弹出窗口
控件时设置
IsLightDismissEnabled=“True”
很有帮助。

而不是玩“失去焦点”,因为“失去焦点”在所有情况下都不起作用(例如,如果弹出窗口中有文本框或其他可聚焦控件)。我建议通过检测根目录中的点击来关闭弹出窗口:

            Application.Current.RootVisual.Tap += (s, e) =>
            {
                popup.IsOpen = false;
            };
而不是玩“失去焦点”,这在所有情况下都不起作用(例如,如果弹出窗口中有文本框或其他可聚焦控件)。我建议通过检测根目录中的点击来关闭弹出窗口:

            Application.Current.RootVisual.Tap += (s, e) =>
            {
                popup.IsOpen = false;
            };


这似乎是朝着正确的方向迈出的一步,但我需要在单击共享按钮时首先将焦点从主页移到弹出窗口。。。我不知道该怎么做,你能提供一个链接或其他什么吗?焦点应该自动转到最上面的元素。在你的情况下,它应该是弹出窗口。我明白了。我在sharePopup.xaml.cs控件中添加了一个popup_LostFocus方法,告诉它关闭弹出窗口,但它没有执行任何操作is@iVikD-应该与设置
焦点
属性一样简单。除非你尝试……当然……我们可能需要看到更多的代码来帮助。您的XAML和处理程序等。这似乎是朝着正确方向迈出的一步,但我需要在单击共享按钮时首先将焦点从主页移到弹出窗口。。。我不知道该怎么做,你能提供一个链接或其他什么吗?焦点应该自动转到最上面的元素。在你的情况下,它应该是弹出窗口。我明白了。我在sharePopup.xaml.cs控件中添加了一个popup_LostFocus方法,告诉它关闭弹出窗口,但它没有执行任何操作is@iVikD-应该与设置
焦点
属性一样简单。除非您尝试……当然……我们可能需要查看更多代码以提供帮助。您的XAML和处理程序等。我们需要查看XAML,但看起来您正在文本框上设置LostFocus事件。当弹出窗口显示时,您是否使文本框获得焦点?如果没有,那么LostFocus将不会被调用到该控件上。你是对的,这是我的错误。。。马上发布XAML。好的。不过,我之前的评论其余部分仍未得到答复。您是否将焦点设置为txtMensaje?更多信息请参见:不,我没有,我删除了txtMensaje_LostFocus。使用您发布的另一个问题,我添加了一个UserControl_Loaded(…)方法,其中包含此.Focus(),以及一个UserControl_LostFocus(…),其中包含关闭弹出窗口的代码,但仍然没有任何内容。您在调试器中看到了什么?阿洛斯,我会尝试继续文本框的想法,并明确地将焦点设置为文本框。应该对其调用LostFocus。我们需要查看XAML,但看起来您正在文本框中设置LostFocus事件。当弹出窗口显示时,您是否使文本框获得焦点?如果没有,那么LostFocus将不会被调用到该控件上。你是对的,这是我的错误。。。马上发布XAML。好的。不过,我先前的其余评论尚未得到回答。您是否将焦点设置为txtMensaje?更多信息请参见:不,我没有,我删除了txtMensaje\u LostFocus。使用您发布的另一个问题,我添加了一个UserControl_Loaded(…)方法,其中包含此.Focus(),以及一个UserControl_LostFocus(…),其中包含关闭弹出窗口的代码,但仍然没有任何内容。您在调试器中看到了什么?阿洛斯,我会尝试继续文本框的想法,并明确地将焦点设置为文本框。LostFocus应该被调用。