【问题标题】:How to close the pop up window when I click outside of popup window当我在弹出窗口之外单击时如何关闭弹出窗口
【发布时间】:2020-01-31 14:16:50
【问题描述】:

这里是 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>

【问题讨论】:

  • 我想知道为什么StaysOpen = "False" 不起作用?
  • StaysOpen = "False" 在关注用户控制时工作。

标签: wpf xaml


【解决方案1】:

Popup 的属性StaysOpen = false 做这项工作。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您必须分配两个属性:

      StaysOpen = false,

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-21
          • 2023-02-09
          • 2018-08-20
          • 2012-08-28
          • 2022-12-31
          • 2021-11-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多