Why does a WPF Popup close when its background area is clicked?
In the end, I found that the following worked. Given...
<Popup x:Name="_popup" StaysOpen="False" PopupAnimation="Slide" AllowsTransparency="True">
...I used this code in the constructor after calling InitializeComponent
...
// Ensure that any mouse event that gets through to the// popup is considered handled, otherwise the popup would close_popup.MouseDown += (s, e) => e.Handled = true;
It does seem odd that it would ignore Focusable on the Popup and Border. I was able to fix your problem by changing StaysOpen in a trigger when the mouse is over the Border:
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ToggleButton x:Name="btnPop" Content="Pop!" Width="100" Height="50"/> <Popup Placement="Bottom" PlacementTarget="{Binding ElementName=btnPop}" IsOpen="{Binding IsChecked, ElementName=btnPop}"> <Popup.Style> <Style TargetType="{x:Type Popup}"> <Setter Property="StaysOpen" Value="False"/> <Style.Triggers> <DataTrigger Binding="{Binding IsMouseOver, ElementName=brd}" Value="True"> <Setter Property="StaysOpen" Value="True"/> </DataTrigger> </Style.Triggers> </Style> </Popup.Style> <Border x:Name="brd" Background="White" BorderThickness="1" BorderBrush="Black"> <StackPanel> <TextBox Margin="10"/> <TextBlock Text="Some text is here." Margin="10"/> <TextBox Margin="10"/> </StackPanel> </Border> </Popup></Grid>