我怎么让dang wpf popup消失?

时间:2009-12-09 04:37:28

标签: wpf xaml popup focus lost-focus

当我使用弹出窗口时,它似乎在闲逛。在下面的代码中,我通过覆盖控件模板将弹出窗口附加到textBox,并在TextBox具有焦点时弹出窗口。当您选择跳到下一个屏幕元素时,弹出窗口会消失,但如果您只是alt-tab到另一个应用程序,弹出窗口将保留在前台。我怎么摆脱它?

<Window x:Class="DropDownPicker.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
      <StackPanel>
         <TextBox Text="hello">
         <TextBox.Style>
            <!-- Simple TextBox -->
            <Style
               TargetType="{x:Type TextBox}">
               <Setter
                  Property="KeyboardNavigation.TabNavigation"
                  Value="None" />
               <Setter
                  Property="FocusVisualStyle"
                  Value="{x:Null}" />
               <Setter
                  Property="AllowDrop"
                  Value="true" />
               <Setter
                  Property="Template">
                  <Setter.Value>
                     <ControlTemplate
                        TargetType="{x:Type TextBox}">
                        <Grid>
                           <Border
                              x:Name="Border"
                              Background="{DynamicResource WindowBackgroundBrush}"
                              BorderBrush="{DynamicResource SolidBorderBrush}"
                              BorderThickness="1"
                              Padding="2"
                              CornerRadius="2">

                              <Grid>
                              <!-- The implementation places the Content into the ScrollViewer. It must be named PART_ContentHost for the control to function -->
                              <ScrollViewer
                                 Margin="0"
                                 x:Name="PART_ContentHost"
                                 Style="{DynamicResource SimpleScrollViewer}"
                                 Background="{TemplateBinding Background}" />

                              <Popup
                                 x:Name="thePopup"
                                 IsOpen="False">
                                 <Border
                                    BorderBrush="Red"
                                    BorderThickness="5">
                                    <TextBlock
                                       Text="Hellssss" />
                                 </Border>
                              </Popup>
                              </Grid>
                           </Border>
                        </Grid>
                        <ControlTemplate.Triggers>
                              <Trigger
                                 Property="IsFocused"
                                 Value="True">
                                 <Setter
                                    TargetName="thePopup"
                                    Property="IsOpen"
                                    Value="True" />
                              </Trigger>
                        </ControlTemplate.Triggers>
                     </ControlTemplate>
                  </Setter.Value>
               </Setter>
            </Style>
         </TextBox.Style>
      </TextBox>
         <TextBox
            Text="ssss" />
       </StackPanel>
    </Grid>
</Window>

4 个答案:

答案 0 :(得分:3)

您是否尝试将StaysOpen属性设置为False

如果StaysOpenTrue,这是默认值,它将保持打开状态,直到控件不再处于焦点位置。如果是False,它将保持打开状态,直到鼠标或键盘事件发生在Popup控件之外,这可能是alt-tabing时的情况。你可能需要稍微调整它以使其表现得像你想要的那样,但它可能是一个起点。

答案 1 :(得分:2)

我听了LostMouseCapture事件,然后将Popup上的StaysOpen属性设置为false

答案 2 :(得分:0)

这是设计的;窗口焦点!=控制焦点,否则当您从窗口中跳出并返回时,光标将跳回第一个控件。如果您希望在窗口未激活时隐藏弹出窗口,则必须手动执行此操作。

答案 3 :(得分:0)

这里也提出类似的问题: WPF Popup ZOrder

检查一下:

http://chriscavanagh.wordpress.com/2008/08/13/non-topmost-wpf-popup/

希望这能帮到你!!