2013-02-22 55 views
1

我有我目前正在開發一個Windows Phone應用程序,和我分享按鈕會打開一個小的彈出幾個選項,使用下面的代碼:的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; 
    } 

現在,此彈出窗口有一個「關閉」按鈕,但如果我沒有點擊它,而是點擊前一個仍然可見的頁面上的另一個按鈕,彈出窗口保持原位,即使在移動到新頁面後也是如此。我必須點擊'關閉'彈出窗口才能離開。

我在尋找的是彈出窗口關閉的方式,如果我點擊彈出窗口本身以外的任何地方。有沒有預定義的方法來做到這一點?如果沒有,我可以採取什麼方式呢?

在此先感謝

編輯:下面是彈出

 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只包含大小,顏色和按鈕定義的C#代碼:

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

+0

我們需要看到XAML,但它看起來像是在文本框上設置了LostFocus事件。你是否讓文本框焦點在彈出窗口顯示?如果不是,那麼LostFocus將不會在該控件上調用。 – 2013-02-22 20:12:47

+0

你說得對,那是我的錯誤......很快發佈XAML。 – iVikD 2013-02-22 20:20:50

+0

好的。儘管我之前的評論的其餘部分還沒有答案。你把重點放在txtMensaje上嗎?看到這個更多的信息:http://stackoverflow.com/questions/124649 – 2013-02-22 20:27:40

回答

1

經過多次失敗的實驗和環顧網絡,我找到了Coding4Fun工具包,並且能夠使用其MessagePrompt製作工作彈出窗口。 該工具包可在http://coding4fun.codeplex.com/

1

您可以嘗試處理UIElement的LostFocus事件。當您的OnLostFocus處理程序在彈出框內被調用時,然後關閉彈出框(關閉它自己)。

+0

這似乎是朝着正確的方向邁出的一步,但我需要首先將焦點從主頁面移動到彈出窗口,當點擊分享按鈕時...我不熟悉如何做到這一點,您是否可以提供鏈接或任何它? – iVikD 2013-02-22 19:52:38

+0

焦點應自動轉到最頂級的UIElement。你的情況應該是彈出窗口。 – 2013-02-22 19:53:30

+0

我明白了。我在sharePopup.xaml中添加了popup_LostFocus方法。cs控件告訴它關閉彈出窗口,但它不會像 – iVikD 2013-02-22 19:56:49

6

我發現有用的只是設置IsLightDismissEnabled="True"當你聲明你的Popup控制。 MSDN description

1

而不是玩在所​​有情況下都不起作用的「失去焦點」(例如,如果在彈出窗口中有文本框或其他可聚焦控件)。我建議通過檢測根視覺中的點擊來解除彈出:

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