在WPF中单击任何其他位置时关闭弹出窗口?

时间:2016-03-14 13:22:19

标签: c# .net wpf xaml

我在WPF中有一个只读的TextBox,我在TextBox MouseDown事件中打开了Popup(Popup.IsOpen设置为true,弹出设置的StaysOpen设置为false)。现在我可以通过鼠标在TextBox中打开弹出窗口。现在,如果我单击窗口中的任何其他位置(不是TextBox,Popup),则弹出窗口不会关闭。是弹出窗口的行为吗?

2 个答案:

答案 0 :(得分:1)

是。这是弹出窗口的预期行为。 除非你调用函数window.close(),否则弹出窗口不会被关闭。

如果您使用的是MessageBox,则可以在单击按钮时调用close函数。

如果您正在使用窗口,则可以在用户的​​任何操作触发器上调用window.close(),例如单击按钮,或者在几秒钟左右后自动超时。希望这能清除你的怀疑。

答案 1 :(得分:1)

不,如果您将Popup设置为StaysOpen,则这不是false控件的正常行为。正常行为在文档中描述为:

  

Popup.StaysOpen Property

     
    

获取或设置一个值,该值指示当控件不再处于焦点时是否关闭Popup控件。

  

话虽如此,如果您没有向我们展示任何代码,我们很难告诉您程序中究竟发生了什么,以便我们可以重现所述行为。例如,这是一个示例应用程序,它在启动时会打开Popup控件,只要您点击其他任何位置,Popup就会消失:

<Window x:Class="SampleApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:SampleApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Popup IsOpen="True" StaysOpen="False" Placement="Center"
               PlacementTarget="{Binding RelativeSource={RelativeSource AncestorType=Window}}">
            <Grid Background="RoyalBlue">
                <TextBlock Text="Popup Text" HorizontalAlignment="Center"
                           Foreground="White"
                           VerticalAlignment="Center" Margin="10"/>
            </Grid>
        </Popup>
    </Grid>
</Window>