当我在弹出窗口之外点击时如何关闭弹出窗口

17

这是打开弹出窗口的XAML代码,用于检查btnViewDetail是否被选中,我需要在单击弹出窗口之外的区域时关闭弹出窗口。

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

我想知道为什么 StaysOpen = "False" 不起作用? - Tyress
2
当焦点移出用户控件时,StaysOpen =“False”有效。 - Sam
5个回答

30

StaysOpen = false 属性可以使弹出窗口关闭。


6

如果 StaysOpen 属性不能满足您的需求,当您的容器元素(在这种情况下为 Grid)具有 Focusable="True" 时,您必须在窗口上捕获 MouseDown 事件。

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

4

有两个属性需要设置:

StaysOpen = false ,

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

然后,设置popup的子元素:Focusable = false

接下来,在其他用户控件中,您可以定义一个EventTrigger在UIElement.LostMouseCapture上来设置popup的IsOpen=true;


0

我怀疑弹出窗口的控制来自哪里。我曾经遇到过同样的问题,并通过在目标的MouseLeftButtonUp事件中打开弹出窗口来解决。


0
添加一个ToggleButton,并将Popup的IsOpen属性绑定到ToggleButton的IsChecked属性,如下所示:
    <ToggleButton IsChecked = {Binding ElementName = "Your_Popup_Name", Path = "IsOpen", Mode = "TwoWay"} Opacity = "0" , Panel.ZIndex = "1">

这个怎么解决问题? - Klaus Gütter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接