1

現在開発中の 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>

4

4 に答える 4

6

コントロール IsLightDismissEnabled="True"を宣言するときに設定するだけで役立つことがわかりました。MSDN の説明Popup

于 2014-11-26T04:42:24.317 に答える
2

すべてのケースで機能するとは限らない「フォーカスの喪失」で遊ぶ代わりに(たとえば、ポップアップにテキストボックスまたはその他のフォーカス可能なコントロールがある場合)。ルート ビジュアルでタップを検出して、ポップアップを閉じることをお勧めします。

            Application.Current.RootVisual.Tap += (s, e) =>
            {
                popup.IsOpen = false;
            };
于 2016-08-03T14:22:53.630 に答える
1

多くの実験に失敗し、Webを見回した後、私はCodi​​ng4Funツールキットに出くわし、そのMessagePromptを使用して機能するポップアップを作成することができました。ツールキットはhttp://coding4fun.codeplex.com/で入手できます。

于 2013-02-23T20:38:35.810 に答える
1

UIElementのLostFocusイベントの処理を試すことができます。OnLostFocusハンドラーがポップアップ内で呼び出されたら、ポップアップを閉じます(それ自体を閉じます)。

于 2013-02-22T19:44:44.080 に答える