单击弹出窗口外部时如何关闭弹出窗口

时间:2016-01-11 10:15:01

标签: wpf xaml

以下是打开弹出窗口IsChecked btnViewDetail XAML代码,我需要在弹出窗口的点击侧关闭弹出窗口。

<Popup IsOpen="{Binding IsChecked, ElementName=btnViewDetail}" PopupAnimation="Fade" Width="300" Height="225" PlacementTarget="{Binding ElementName=svTotalStock}" Placement="Top" StaysOpen="False">
    <Grid Background="Black">
        <TextBlock TextWrapping="Wrap" Text="Raw Materials details" 
                   VerticalAlignment="Top" Height="25" FontFamily="Segoe UI Semibold" 
                   Padding="7,6,0,0" FontWeight="Bold" FontSize="14" Foreground="White" 
                   Margin="0,2,59,0"/>
        <Border BorderThickness="1" BorderBrush="Black"/>
    </Grid>
</Popup>
<Grid>
    <Grid.ContextMenu>
        <ContextMenu>
            <MenuItem IsCheckable="True" Name="btnViewDetail" Header="View Details"/>
        </ContextMenu>
    </Grid.ContextMenu>
</Grid>

4 个答案:

答案 0 :(得分:7)

弹出StaysOpen = false

属性可以做到这一点。

答案 1 :(得分:6)

如果StaysOpen属性无法处理您的情况,则当您的容器元素(在您的情况下,MouseDown)具有Grid <时,您必须在窗口上捕获Focusable="True"事件/ p>

private void Window_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    gridContainer.Focus();
}

答案 2 :(得分:2)

您必须分配两个属性:

StaysOpen = false

当StaysOpen属性设置为true时,Popup将保持打开状态,直到通过将IsOpen属性设置为false来显式关闭它。当StaysOpen为false时,Popup控件拦截所有鼠标和键盘事件,以确定其中一个事件何时发生在Popup控件之外。

接下来,设置弹出窗口的孩子:Focusable = false

然后在你想要打开弹出窗口的其他用户控件中,在UIElement.LostMouseCapture上定义一个EventTrigger来设置弹出窗口IsOpen = true;

答案 3 :(得分:0)

我怀疑打开弹出窗口的控件。我什至遇到了同样的问题,并且通过打开目标的MouseLeftButtonUp弹出窗口而感到反感。