Я не совсем уверен, что вы подразумеваете под "щелчком по сторонам", потому что всплывающие окна действуют модально.
Вы должны настроить ваше всплывающее окно как ChildWindow.Затем вы можете обработать событие Closed.
Вот очень простой пример, который показывает выбранную строку из списка в главном окне.
Сначала главное окно:
<UserControl x:Class="PopupTest.MainPage"
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"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel Orientation="Vertical">
<ListBox x:Name="SomeList" Width="100" Height="100" />
<TextBlock x:Name="DialogResult" Width="100" />
</StackPanel>
</Grid>
В заднем коде всплывающее окно запускается при изменении выбора списка.Просто настройте закрытый обработчик.В этом примере я просто помещаю выбранный элемент списка в текстовый блок, затем после закрытия всплывающего окна я просто помещаю результат диалога в текстовый блок в главном окне (чтобы показать, нажал ли пользователь ok или отменить).
public MainPage()
{
InitializeComponent();
SomeList.SelectionChanged += new SelectionChangedEventHandler(SomeList_SelectionChanged);
SomeList.Items.Add("one");
SomeList.Items.Add("two");
SomeList.Items.Add("three");
}
void SomeList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var popup = new SomePopup();
popup.Closed += new EventHandler(popup_Closed);
popup.ChosenItem.Text = (string)SomeList.SelectedItem;
DialogResult.Text = "";
popup.Show();
}
void popup_Closed(object sender, EventArgs e)
{
var popup = sender as SomePopup;
if (popup.DialogResult == true)
DialogResult.Text = "Ok";
else
DialogResult.Text = "Cancel";
}
Всплывающее окно закрывается, когда пользователь нажимает Ok или Cancel, потому что значение DialogResult установлено в коде позади всплывающего окна:
private void OKButton_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
private void CancelButton_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
}