web-dev-qa-db-fra.com

WPF Combobox DefaultValue (veuillez sélectionner)

Salut, j'ai un WPF Combobox qui affiche une liste d'énumérations. Le code est ci-dessous.

    <ComboBox HorizontalAlignment="Left" 
              Margin="139,299,0,0" 
              VerticalAlignment="Top" 
              ItemsSource="{Binding Source={StaticResource Enum}}"
              Width="78"/> 

Cependant, lorsque la vue est chargée, elle affiche la première énumération de la liste, mais j'aimerais qu'elle affiche "Veuillez sélectionner", il y a donc du XAML pour le faire (C # dans la vue si besoin est).

Merci

24
user3428422

Toutes les bonnes réponses qui ont été fournies, mais j'ai utilisé ce qui suit pour résoudre mon problème

<ComboBox SelectedIndex="0">
    <ComboBox.ItemsSource>
        <CompositeCollection>
            <ListBoxItem>Please Select</ListBoxItem>
            <CollectionContainer Collection="{Binding Source={StaticResource YOURDATASOURCE}}" />
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

Merci à tous ceux qui ont aidé!

37
user3428422

Ajoutez ces propriétés à votre zone de liste déroulante et vous pouvez définir un texte par défaut "Veuillez sélectionner" sur une zone de liste déroulante.

<ComboBox IsEditable="True" IsReadOnly="True" Text="Please Select"/>

Pour une solution plus polyvalente, vous pouvez créer un filigrane pour la zone de liste déroulante

17
Krishna

Je l'ai fait avec le mien, ça marche pour moi, car j'ai des objets statiques.

<ComboBox Name="cbxType" HorizontalAlignment="Left" Margin="116,41,0,0" VerticalAlignment="Top" Width="192">
    <ComboBoxItem Name="create" IsSelected="True">create database</ComboBoxItem>
    <ComboBoxItem Name="update">update database</ComboBoxItem>
</ComboBox>
9
MelloG

Vous pouvez y parvenir avec le code suivant:

<Grid>
                <ComboBox
                    MinWidth="120"
                    x:Name="MyCombo"
                    ItemsSource="{Binding FileTypes}"  
                    SelectedItem="{Binding SelectedFileType}"/>
                <TextBlock
                    VerticalAlignment="Center"
                    HorizontalAlignment="Center"
                    Visibility="{Binding SelectedItem, ElementName=MyCombo, Converter={StaticResource NullToVisibilityConverter}}"
                    IsHitTestVisible="False"
                    Text="Select Option...  " />
</Grid>

Chaque fois que vous avez besoin du texte ci-dessus (la zone de texte), vous pouvez utiliser le VisibilityConverter pour afficher votre texte au-dessus de la zone de liste déroulante ...

Ajoutez quelque chose comme ça à vos ressources:

<local:NullToVisibilityConverter x:Key="NullToVisibilityConverter" />
8
AP_TheMoe

Ajoutez la valeur "Veuillez sélectionner" à votre EnumCollection

Définissez la valeur par défaut dans le stylesetter combobox

<Style x:Key="ComboStyle" TargetType="{x:Type ComboBox}">
    <Setter Property="SelectedIndex" Value="0"/>
</Style>

XAML:

<ComboBox HorizontalAlignment="Left" 
              Margin="139,299,0,0" 
              Style="{StaticResource ComboStyle}"
              VerticalAlignment="Top" 
              ItemsSource="{Binding Source={StaticResource ComboBox}}"
              Width="78"/> 
2
Sajeetharan - MSFT

Je ne sais pas comment le faire sans code-behind, peut-être quelques déclencheurs ou DataTemplateSelectors ...?

En code-behind:

  1. Ajoutez une propriété de chaîne énumérable qui ne contiendra qu'une seule chaîne: "Veuillez sélectionner"
  2. En XAML, définissez ItemsSource sur cette propriété et SelectedIndex = 0
  3. Dans DropDownOpened ensemble d'événements ComboBox.ItemsSource à votre collection Enum
1
amnezjak

Définissez la valeur par défaut du ComboBox sur "SELL" lorsque le contrôle est chargé/initialisé pour la première fois dans une fenêtre WPF/un contrôle utilisateur:

<ComboBox x:Name="OrderType" 
          Width="100" Height="20"
          SelectedIndex="1">
         <ComboBoxItem Content="BUY"/>
         <ComboBoxItem Content="SELL"/> 
</ComboBox>
1
Bo Jangles