2010-09-23 8 views
0

J'ai une liste déroulante qui reste ouverte si l'utilisateur ne fait pas de sélection. Je voudrais utiliser un déclencheur pour fermer la combobox après 2 secondes. Voici une partie de mon style combobox qui comprend ma tentative avortée de EventTrigger à y parvenir:Fermer la liste déroulante après n secondes

<Style x:Key="ComboBoxStyle" TargetType="{x:Type ComboBox}"> 
    <Setter Property="FontFamily" Value="Bryant"/> 
    <Setter Property="FontSize" Value="18px"/> 
    <Setter Property="FontWeight" Value="Bold"/> 
    <Setter Property="FocusVisualStyle" Value="{StaticResource ComboBoxFocusVisual}"/> 
    <Setter Property="Foreground" Value="#FF000000"/> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="Padding" Value="4,3"/> 
    <Setter Property="Margin" Value="5"/> 
    <Setter Property="Template"> 
    <Setter.Value> 
    <ControlTemplate TargetType="{x:Type ComboBox}"> 
     <Grid x:Name="MainGrid" SnapsToDevicePixels="true"> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="0*"/> 
     <ColumnDefinition/> 
     <ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/> 
     </Grid.ColumnDefinitions> 
     <Popup Margin="1" x:Name="PART_Popup" AllowsTransparency="true" StaysOpen="False" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Placement="Bottom" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Grid.ColumnSpan="2" Grid.Column="1"> 
     <Border x:Name="DropDownBorder" Background="{DynamicResource GrayBG}" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{Binding ActualWidth, ElementName=MainGrid}" BorderBrush="{StaticResource GrayBGBorder}" BorderThickness="2,0,2,2" CornerRadius="0,0,4,4" Width="{Binding ActualWidth, ElementName=DropWidth}"> 
     <ScrollViewer CanContentScroll="true" Template="{DynamicResource NeeboScrollViewer}"> 
      <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.DirectionalNavigation="Contained"/> 
     </ScrollViewer> 
     </Border> 
     </Popup> 
     <ToggleButton x:Name="DropWidth" Style="{StaticResource ComboBoxReadonlyToggleButton}" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" Grid.ColumnSpan="2" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Grid.Column="1"/> 
     <ContentPresenter HorizontalAlignment="Left" Margin="35,0,0,0" VerticalAlignment="Center" IsHitTestVisible="false" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Grid.Column="1"/> 
     </Grid> 
     <ControlTemplate.Triggers> 
     <Trigger Property="HasItems" Value="false"> 
     <Setter Property="Height" TargetName="DropDownBorder" Value="95"/> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="false"> 
     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
     <Setter Property="Background" Value="#FFF4F4F4"/> 
     </Trigger> 
     <Trigger Property="IsGrouping" Value="true"> 
     <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
     </Trigger> 
          <EventTrigger RoutedEvent="(Popup.Opened)" SourceName="PART_Popup" > 
           <BeginStoryboard> 
            <Storyboard> 
             <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_Popup" Storyboard.TargetProperty="(Popup.IsOpen)"> 
              <DiscreteBooleanKeyFrame KeyTime="00:00:03" Value="False"/> 
             </BooleanAnimationUsingKeyFrames> 
            </Storyboard> 
           </BeginStoryboard> 
          </EventTrigger> 
         </ControlTemplate.Triggers> 
    </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
    </Style> 

Toutes les suggestions sur la façon d'y parvenir?

Répondre

1

Je ne peux pas penser à un moyen de faire cela sans le comportement de l'outil qui souscrira l'événement ouvert et attendez 2 secondes pour le fermer s'il n'est pas déjà fermé.

Si vous ne savez pas ce qui est attaché, il suffit de le google. Après avoir implémenté celui-ci, vous pouvez le définir dans votre style comme comportement par défaut.

+0

Oui, c'est ce dont j'avais besoin. Je l'ai eu avec un comportement attaché. Thansk! –

Questions connexes