WPF应用程序中不正确的Pop控件行为?

时间:2016-08-14 19:29:23

标签: wpf popup wpf-controls togglebutton 2-way-object-databinding

我添加了Popup控件,该控件与WPF中MainWindow.xmal文件上的Toggle按钮的放置目标绑定。 Toggle按钮的IsChecked属性与Popup控件的IsOpen属性绑定,以具有同步行为。 当我们运行并最大化应用程序的MainWindow时,单击切换按钮。它会打开弹出控件。直到这一点,这是正常的行为。 但是当我们使用Shift + Tab按钮切换到另一个窗口时,弹出控件仍处于打开状态。它应该是运行应用程序的一部分。它应该在MainWindow的后台。但它出现在突出显示应用程序的前窗上。

 <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions >
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Popup Name="popCntrl" AllowsTransparency="True" Placement="Left" PlacementTarget="{Binding ElementName=btnToggle}" >
                <Border BorderBrush="AliceBlue" BorderThickness="1">
                    <StackPanel Width="200" Height="150" Background="Aqua">
                        <TextBlock Text=" This is Pop up window content. Should be part of running application"/>
                    </StackPanel>
                </Border>
            </Popup>
            <ToggleButton Grid.RowSpan="2" Name="btnToggle" Height="20" Width="60" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center" 
                          IsChecked="{Binding ElementName=popCntrl ,Path=IsOpen, UpdateSourceTrigger=PropertyChanged}" BorderBrush="Black" BorderThickness="2" Background="Brown" />

    </Grid>

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为您需要的是将false上的StaysOpen属性设置为Popup。当你设置它时,弹出窗口会在失去焦点时自行关闭。

来自MSDN

  

当StaysOpen属性设置为true时,Popup会一直保持打开状态   通过将IsOpen属性设置为false显式关闭。什么时候   StaysOpen是假的,Popup控件拦截所有鼠标和   用于确定其中一个事件发生在外部的键盘事件   弹出控件。