Wpf Common Controls Label Combobox Complete Guide

 Last Update:2025-06-23T00:00:00     .NET School AI Teacher - SELECT ANY TEXT TO EXPLANATION.    6 mins read      Difficulty-Level: beginner

Understanding the Core Concepts of WPF Common Controls Label, ComboBox

WPF Common Controls: Label and ComboBox Explained in Detail

Label Control

The Label control in WPF is used to identify or describe other controls within your application. It is primarily designed for displaying non-editable text, images, or other content that provides context or information to users.

Key Properties of Label:

  1. Content: Sets the content of the label, which can be text, an image, or other types of controls. For example:
    <Label Content="Welcome to Our Application" />
    
  2. FontWeight: Adjusts the weight of the label's font, making it bold, light, or anything else.
    <Label Content="Important Info" FontWeight="Bold" />
    
  3. FontSize: Changes the size of the font in the label.
    <Label FontSize="14" Content="Please read carefully." />
    
  4. Foreground: Alters the color of the label’s text.
    <Label Foreground="Red" Content="Warning" />
    
  5. HorizontalAlignment and VerticalAlignment: Aligns the label within its containing layout.
    <Label Content="Centered Label" HorizontalAlignment="Center" VerticalAlignment="Center" />
    
  6. Padding: Adds space around the content within the label.
    <Label Padding="10" Content="Spaced Out" />
    

Usage Example: Below is a simple XAML snippet demonstrating the use of a Label control within a Grid Layout.

<Grid>
    <Label Content="Enter your name:" 
           HorizontalAlignment="Left" VerticalAlignment="Top" 
           Margin="10" FontSize="16" FontWeight="Bold" />
</Grid>

ComboBox Control

The ComboBox control allows users to select a single item from a list of options. It's useful in scenarios where you need to offer a predefined set of options for a user to choose from.

Key Features and Properties of ComboBox:

  1. ItemsSource: Binds the ComboBox to a collection of data items.
    <ComboBox ItemsSource="{Binding Colors}" DisplayMemberPath="Name" SelectedValuePath="Value" />
    
  2. Items: Directly adds items to the ComboBox. Useful for static lists.
    <ComboBox>
        <ComboBoxItem Content="Red" />
        <ComboBoxItem Content="Green" />
        <ComboBoxItem Content="Blue" />
    </ComboBox>
    
  3. SelectedItem: Gets or sets the currently selected item in the ComboBox.
    <ComboBox x:Name="colorComboBox" ItemsSource="{Binding Colors}" SelectedItem="{Binding SelectedColor}" />
    
  4. SelectedValue: Retrieves or sets the value of the selected item, based on the SelectedValuePath.
    <ComboBox ItemsSource="{Binding Colors}" SelectedValuePath="Value" SelectedValue="{Binding MySelectedColor}" />
    
  5. Text: Gets or sets the text of the ComboBox. It's useful when the ComboBox's IsEditable property is set to true.
    <ComboBox IsEditable="True" Text="{Binding MyEditableText}" />
    
  6. IsEditable: Allows the ComboBox to be editable, enabling users to type in their choice.
    <ComboBox IsEditable="True" />
    
  7. Width and Height: Specifies the dimensions of the ComboBox.
    <ComboBox Width="200" Height="30" />
    
  8. DropDownClosed and DropDownOpened Events: Can be tied to event handlers to execute code when the ComboBox's dropdown opens or closes.
    <ComboBox DropDownClosed="ComboBox_DropDownClosed" DropDownOpened="ComboBox_DropDownOpened" />
    

Usage Example: The following code snippet illustrates a ComboBox control bound to a list of color options.

Online Code run

🔔 Note: Select your programming language to check or run code at

💻 Run Code Compiler

Step-by-Step Guide: How to Implement WPF Common Controls Label, ComboBox

Example 1: Using a Label in WPF

Step 1: Create a New WPF Application

  1. Open Visual Studio.
  2. Click on "Create a new project".
  3. Select "WPF App (.NET Framework)" or "WPF App (.NET Core)" depending on your preference.
  4. Name your project (e.g., WpfLabelExample) and click "Create".

Step 2: Define the UI in XAML

Open MainWindow.xaml file and modify it to include a Label. Here's a simple example:

<Window x:Class="WpfLabelExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Label Example" Height="200" Width="300">
    <Grid>
        <Label Content="Hello, World!" 
               HorizontalAlignment="Center" 
               VerticalAlignment="Center" 
               FontSize="20" 
               FontWeight="Bold" 
               Foreground="Blue"/>
    </Grid>
</Window>

Step 3: Run the Application

  1. Press F5 or click on "Start" to build and run the application.
  2. You should see a window with a blue, bold label saying "Hello, World!" at the center.

Example 2: Using a ComboBox in WPF

Step 1: Create a New WPF Application

Follow the same steps as in Example 1 to create a new project (e.g., WpfComboBoxExample).

Step 2: Define the UI in XAML

Open MainWindow.xaml file and modify it to include a ComboBox:

<Window x:Class="WpfComboBoxExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ComboBox Example" Height="250" Width="300">
    <StackPanel Margin="10">
        <Label Content="Select an Item:" FontSize="16" FontWeight="Regular" Foreground="Black"/>
        <ComboBox x:Name="cmbItems" Width="180" Margin="0,10,0,0" SelectionChanged="cmbItems_SelectionChanged">
            <ComboBoxItem Content="Apple"/>
            <ComboBoxItem Content="Banana"/>
            <ComboBoxItem Content="Cherry"/>
            <ComboBoxItem Content="Date"/>
        </ComboBox>
        <TextBlock x:Name="txtSelected" FontSize="14" Margin="0,20,0,0" Text="You have not selected any item yet."/>
    </StackPanel>
</Window>

Step 3: Handle the SelectionChanged Event in Code-Behind

Open MainWindow.xaml.cs file and add the following code to handle the SelectionChanged event of the ComboBox.

Top 10 Interview Questions & Answers on WPF Common Controls Label, ComboBox

1. How do I create a simple Label in XAML?

Answer: Creating a simple Label in XAML is straightforward. You just need to specify the type and set its Content property to the desired text.

<Label Content="Hello, World!" />

2. How can I bind a Label to a property in my ViewModel?

Answer: To bind a Label to a ViewModel property, you first need to set the DataContext of your UI element (like a Window, UserControl, etc.) to an instance of your ViewModel. Then, use the Binding markup extension on the Content property of the Label.

Here’s an example:

ViewModel.cs

public class MyViewModel : INotifyPropertyChanged
{
    private string _statusMessage;
    public string StatusMessage
    {
        get { return _statusMessage; }
        set
        {
            if (_statusMessage != value)
            {
                _statusMessage = value;
                OnPropertyChanged(nameof(StatusMessage));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

MainWindow.xaml

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="200" Width="300">
    <Window.DataContext>
        <local:MyViewModel />
    </Window.DataContext>
    <Grid>
        <Label Content="{Binding StatusMessage}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</Window>

3. How do I style a Label or change its font properties?

Answer: You can apply styles and modify font properties such as size, family, style, weight by either directly setting these properties in XAML or by defining a style.

Directly Setting Properties:

<Label Content="Styled Label" FontSize="18" FontWeight="Bold" FontStyle="Italic" Foreground="Blue" FontFamily="Arial" />

Using a Style Definition:

<Window.Resources>
    <Style TargetType="Label">
        <Setter Property="FontSize" Value="18" />
        <Setter Property="FontWeight" Value="Bold" />
        <Setter Property="FontStyle" Value="Italic" />
        <Setter Property="Foreground" Value="Red" />
        <Setter Property="FontFamily" Value="Verdana" />
    </Style>
</Window.Resources>

<Label Content="Styled Label" />

4. How do I create a ComboBox in XAML with static items?

Answer: A ComboBox can be populated with static items by using ComboBoxItem elements within the Items property.

<ComboBox Width="200">
    <ComboBoxItem Content="Option One" />
    <ComboBoxItem Content="Option Two" />
    <ComboBoxItem Content="Option Three" />
</ComboBox>

Alternatively, you can use text directly without ComboBoxItem:

<ComboBox Width="200">
    <sys:String>Option One</sys:String>
    <sys:String>Option Two</sys:String>
    <sys:String>Option Three</sys:String>
</ComboBox>

Remember to include xmlns:sys="clr-namespace:System;assembly=mscorlib" at the beginning of your XAML file.

5. How do I bind a ComboBox to a collection of objects?

Answer: Binding a ComboBox to a collection involves setting the ItemsSource and optionally the DisplayMemberPath (if each item in the collection is a complex object).

Here’s a simple example:

ViewModel.cs

public class MyViewModel
{
    public ObservableCollection<string> Options { get; set; }

    public MyViewModel()
    {
        Options = new ObservableCollection<string> { "One", "Two", "Three" };
    }
}

MainWindow.xaml

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApp"
        Title="MainWindow" Height="200" Width="300">
    <Window.DataContext>
        <local:MyViewModel/>
    </Window.DataContext>
    <Grid>
        <ComboBox Width="200" ItemsSource="{Binding Options}"/>
    </Grid>
</Window>

If Options were a collection of custom objects:

<ComboBox Width="200" ItemsSource="{Binding Options}" DisplayMemberPath="YourPropertyName"/>

6. How can I handle the selection change in a ComboBox?

Answer: You can handle selection changes using the SelectionChanged event.

<ComboBox Width="200" ItemsSource="{Binding Options}" SelectionChanged="ComboBox_SelectionChanged" />

In your code-behind:

MainWindow.xaml.cs

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (sender is ComboBox comboBox && comboBox.SelectedItem is string selectedValue)
    {
        MessageBox.Show("Selected item: " + selectedValue);
    }
}

7. Can I use data templates with ComboBox items?

Answer: Yes, you can use data templates to customize the visual appearance of ComboBox items, especially when the items are complex objects.

Here’s an example with a collection of custom objects:

ViewModel.cs

public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}

public class MyViewModel
{
    public ObservableCollection<Product> Products { get; set; }

    public MyViewModel()
    {
        Products = new ObservableCollection<Product>
        {
            new Product { Name = "Product A", Price = 12.99m },
            new Product { Name = "Product B", Price = 15.75m },
            new Product { Name = "Product C", Price = 9.99m }
        };
    }
}

MainWindow.xaml

<Window.Resources>
    <DataTemplate DataType="{x:Type local:Product}">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Name}" Margin="5"/>
            <TextBlock Text="{Binding Price, StringFormat=C}" Margin="5"/>
        </StackPanel>
    </DataTemplate>
</Window.Resources>

<ComboBox Width="200" ItemsSource="{Binding Products}" SelectedItem="{Binding SelectedProduct}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" Margin="5"/>
                <TextBlock Text="{Binding Price, StringFormat=C}" Margin="5"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

8. How do I add a ComboBox to a DataGrid column?

Answer: To add a ComboBox to a DataGrid column, you use a DataGridComboBoxColumn. This column allows each cell in the column to act as a drop-down list.

Here’s an example:

MainWindow.xaml

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Products}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
        <DataGridTextColumn Header="Price" Binding="{Binding Price, StringFormat=C}" />
        <DataGridComboBoxColumn Header="Category" DisplayMemberPath="CategoryName" SelectedValueBinding="{Binding CategoryId}"
                                SelectedValuePath="CategoryId"
                                ItemsSource="{Binding Source={StaticResource CategoriesViewModel}, Path=Categories}" />
    </DataGrid.Columns>
</DataGrid>

And make sure the CategoriesViewModel containing Categories collection is accessible via resources.

9. How can I make the ComboBox editable so users can input custom values?

Answer: You can make a ComboBox editable by setting IsEditable property to True. Optionally, you can also handle the TextChanged event to perform actions based on user input.

<ComboBox Width="200" IsEditable="True" TextChanged="ComboBox_TextChanged">
    <ComboBoxItem Content="Option One" />
    <ComboBoxItem Content="Option Two" />
    <ComboBoxItem Content="Option Three" />
</ComboBox>

In your code-behind:

MainWindow.xaml.cs

private void ComboBox_TextChanged(object sender, TextChangedEventArgs e)
{
    if (sender is ComboBox comboBox)
    {
        MessageBox.Show("User text: " + comboBox.Text);
    }
}

10. How do I prevent duplicate selections in a ComboBox bound to an observable collection?

Answer: If you want to prevent duplicate selections in a ComboBox, first ensure that the underlying collection (ObservableCollection) does not contain duplicates. The ComboBox itself does not automatically enforce this behavior.

However, if you're adding new items dynamically and checking for duplicates, you can do something like this:

private void AddNewItemToComboBox(string newItem)
{
    if (!myViewModel.Options.Contains(newItem))
    {
        myViewModel.Options.Add(newItem);
    }
    else
    {
        MessageBox.Show("Item already exists.");
    }
}

Alternatively, you can use LINQ or hash sets to manage the collection more effectively ensuring no duplicates are added.

You May Like This Related .NET Topic

Login to post a comment.