Как я могу сделать, что всплывающее окно чертовски 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/
Надеюсь, это поможет вам!
Это по замыслу; Фокус окна!= Фокус управления, в противном случае, когда вы уйдете от окна и вернетесь назад, курсор вернется к первому элементу управления. Если вы хотите, чтобы всплывающее окно было скрыто, когда окно не активно, вы должны сделать это вручную.