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

bwitn5fc  于 2022-12-07  发布在  其他
关注(0)|答案(5)|浏览(260)

这是XAML代码,用于打开弹出窗口IsChecked 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>
olmpazwi

olmpazwi1#

属性执行此工作。

drkbr07n

drkbr07n2#

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

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

qyzbxkaa3#

您必须指定两个属性:
StaysOpen = false
当StaysOpen属性设置为true时,Popup将保持打开状态,直到通过将IsOpen属性设置为false将其显式关闭为止.当StaysOpen为false时,Popup控件将截获所有鼠标与键盘事件,以确定这些事件之一何时在Popup控件外部发生.
接下来,设置弹出窗口的子项:Focusable = false
然后,在您希望打开弹出窗口的其他用户控件中,在UIElement.LostMouseCapture上定义一个EventTrigger,以设置弹出窗口的IsOpen = true;

66bbxpm5

66bbxpm54#

我怀疑是从弹出窗口打开的控件。我甚至有同样的问题,并通过打开目标的MouseLeftButtonUp弹出窗口重新喜欢。

uz75evzq

uz75evzq5#

添加一个togglebutton,将popup的IsOpen属性绑定到toggleButton的IsChecked属性,如下图所示:

<ToggleButton IsChecked = {Binding ElementName = "Your_Popup_Name", Path = "IsOpen", Mode = "TwoWay"} Opacity = "0" , Panel.ZIndex = "1">

相关问题