2009-12-09 70 views
1

當我使用彈出窗口時,它似乎在四處流淌。在下面的代碼中,我通過覆蓋控件模板來附加彈出框到文本框,並在TextBox有焦點時使彈出框出現。當您選擇屏幕上的下一個元素時,彈出窗口會消失,但如果您只是將Alt鍵切換到不同的應用程序,則彈出窗口會保留在前景中。我如何擺脫它?我該如何讓dang wpf彈出窗口消失?

<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> 

回答

0

這是通過設計;窗口焦點!=控制焦點,否則當您從窗口中拉出並返回時,光標會跳回到第一個控件。如果您希望窗口未處於活動狀態時隱藏彈出窗口,則必須手動執行此操作。

+0

的WPF組合框它,香港專業教育學院有一個爬通反射器,但無法找到它,任何想法如何? – 2009-12-09 04:59:51

+0

所以我並不是說這是不可能的,只是這種行爲必須明確地編碼 - 嘗試使用混合 – 2009-12-09 05:05:19

3

您是否嘗試將StaysOpen屬性設置爲False

如果StaysOpenTrue,這是默認值,它將保持打開狀態,直到控件不再焦點。如果它是False,它將一直保持打開狀態,直到Popup控件以外出現鼠標或鍵盤事件時爲止,這可能是alt-tabing的情況。您可能需要稍微調整一下以使其表現得像您想要的那樣,但這可能是一個起點。

+1

擴展ComboBox模板,如果我將上面的代碼中的StaysOpen設置爲false,我的彈出窗口永遠不會出現。 – 2009-12-09 05:00:23

2

我聽了LostMouseCapture事件,然後設置,在彈出的StaysOpen屬性設置爲false