How to display default text "--Select Team --" in combo box on pageload in WPF? How to display default text "--Select Team --" in combo box on pageload in WPF? wpf wpf

How to display default text "--Select Team --" in combo box on pageload in WPF?


The easiest way I've found to do this is:

<ComboBox Name="MyComboBox" IsEditable="True" IsReadOnly="True" Text="-- Select Team --" />

You'll obviously need to add your other options, but this is probably the simplest way to do it.

There is however one downside to this method which is while the text inside your combo box will not be editable, it is still selectable. However, given the poor quality and complexity of every alternative I've found to date, this is probably the best option out there.


You can do this without any code behind by using a IValueConverter.

<Grid>   <ComboBox       x:Name="comboBox1"       ItemsSource="{Binding MyItemSource}"  />   <TextBlock       Visibility="{Binding SelectedItem, ElementName=comboBox1, Converter={StaticResource NullToVisibilityConverter}}"       IsHitTestVisible="False"       Text="... Select Team ..." /></Grid>

Here you have the converter class that you can re-use.

public class NullToVisibilityConverter : IValueConverter{    #region Implementation of IValueConverter    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)    {        return value == null ? Visibility.Visible : Visibility.Collapsed;    }    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)    {        throw new NotImplementedException();    }    #endregion}

And finally, you need to declare your converter in a resource section.

<Converters:NullToVisibilityConverter x:Key="NullToVisibilityConverter" />

Where Converters is the place you have placed the converter class. An example is:

xmlns:Converters="clr-namespace:MyProject.Resources.Converters"

The very nice thing about this approach is no repetition of code in your code behind.


I like Tri Q's answer, but those value converters are a pain to use. PaulB did it with an event handler, but that's also unnecessary. Here's a pure XAML solution:

<ContentControl Content="{Binding YourChoices}">    <ContentControl.ContentTemplate>        <DataTemplate>            <Grid>                <ComboBox x:Name="cb" ItemsSource="{Binding}"/>                <TextBlock x:Name="tb" Text="Select Something" IsHitTestVisible="False" Visibility="Hidden"/>            </Grid>            <DataTemplate.Triggers>                <Trigger SourceName="cb" Property="SelectedItem" Value="{x:Null}">                    <Setter TargetName="tb" Property="Visibility" Value="Visible"/>                </Trigger>            </DataTemplate.Triggers>        </DataTemplate>    </ContentControl.ContentTemplate> </ContentControl>