Как я могу сделать, что всплывающее окно чертовски WPF уйти?

Когда я использую всплывающее окно, кажется, торчать вокруг. в приведенном ниже коде я присоединяю всплывающее окно к 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 ответа

Вы пытались установить StaysOpen собственность на False?

Если StaysOpen является True, который используется по умолчанию, он останется открытым, пока элемент управления больше не будет в фокусе. Если это False он будет оставаться открытым, пока не произойдет событие мыши или клавиатуры вне Popup контроль, который может иметь место при alt-tabing. Возможно, вам придется немного настроить его, чтобы он вел себя так, как вы хотите, но это может быть отправной точкой.

Я прослушал событие LostMouseCapture и затем установил для свойства StaysOpen в всплывающем окне значение false

Аналогичный вопрос задают и здесь: WPF Popup ZOrder

Проверь это:

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

Надеюсь, это поможет вам!

Это по замыслу; Фокус окна!= Фокус управления, в противном случае, когда вы уйдете от окна и вернетесь назад, курсор вернется к первому элементу управления. Если вы хотите, чтобы всплывающее окно было скрыто, когда окно не активно, вы должны сделать это вручную.

Другие вопросы по тегам