<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication1="clr-namespace:WpfApplication1" Title="WPF" Height="300" Width="300"> <Window.Resources> <WpfApplication1:People x:Key="people"/> <DataTemplate x:Key="personTemplate"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="80"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <StackPanel> <TextBlock Style="{StaticResource lblStyle}" Text="First Name" /> <TextBlock Style="{StaticResource dataStyle}" Text="{Binding Path=FirstName}"/> <TextBlock Style="{StaticResource lblStyle}" Text="Age" /> <TextBlock Style="{StaticResource dataStyle}" Text="{Binding Path=Age}" /> </StackPanel> <Image Margin="4" Grid.Column="1" Width="96" Height="140" Source="{Binding Path=Photo}"/> </Grid> </DataTemplate> </Window.Resources> <Grid> <ListBox ItemsSource="{Binding Source={StaticResource people}}" ItemTemplate="{StaticResource personTemplate}"/> </Grid> </Window> //File:Window.xaml.cs using System.Collections.ObjectModel; namespace WpfApplication1 { public class Employee { public string FirstName { get; set; } public int Age { get; set; } public string Photo { get; set; } public override string ToString() { return FirstName; } } public class People : Collection<Employee> { public People() { this.Add(new Employee() { FirstName = "A", Age = 26, Photo = "a.png" }); this.Add(new Employee() { FirstName = "C", Age = 24, Photo = "c.png" }); } } }
Author: coder
Without specifying a DataTemplate, the ListBox displays a list of names.
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication1="clr-namespace:WpfApplication1" Title="WPF" Height="300" Width="300"> <Window.Resources> <WpfApplication1:People x:Key="people"/> <DataTemplate x:Key="personTemplate"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="80"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <StackPanel> <TextBlock Style="{StaticResource lblStyle}" Text="First Name" /> <TextBlock Style="{StaticResource dataStyle}" Text="{Binding Path=FirstName}"/> <TextBlock Style="{StaticResource lblStyle}" Text="Age" /> <TextBlock Style="{StaticResource dataStyle}" Text="{Binding Path=Age}" /> </StackPanel> <Image Margin="4" Grid.Column="1" Width="96" Height="140" Source="{Binding Path=Photo}"/> </Grid> </DataTemplate> </Window.Resources> <Grid> <ListBox Margin="10" ItemsSource="{Binding Source={StaticResource people}}"/> </Grid> </Window> //File:Window.xaml.cs using System.Collections.ObjectModel; namespace WpfApplication1 { public class Employee { public string FirstName { get; set; } public int Age { get; set; } public string Photo { get; set; } public override string ToString() { return FirstName; } } public class People : Collection<Employee> { public People() { this.Add(new Employee() { FirstName = "A", Age = 26, Photo = "a.png" }); this.Add(new Employee() { FirstName = "C", Age = 24, Photo = "c.png" }); } } }
Different Font Family and Size for each ListBoxItem
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WPF" Height="300" Width="300"> <StackPanel> <ListBox SelectionChanged="OuterListBox_SelectionChanged" Name="outerListBox"> <ListBoxItem Content="Item 1" FontFamily="Tahoma" HorizontalContentAlignment="Left" /> <ListBoxItem Content="Item 2" FontFamily="Algerian" FontSize="16" HorizontalContentAlignment="Center" /> <ListBoxItem Content="Item 3" FontSize="20" HorizontalContentAlignment="Right" /> <Button Content="Button directly in a list" Margin="5" /> <ListBoxItem HorizontalContentAlignment="Center" Margin="5"> <Button Content="Button wrapped in ListBoxItem" /> </ListBoxItem> <ListBox Height="50" Margin="5"> <ListBoxItem Content="Inner List Item 1" Selected="InnerListBoxItem_Selected" /> <ListBoxItem Content="Inner List Item 2" Selected="InnerListBoxItem_Selected" /> <ListBoxItem Content="Inner List Item 3" Selected="InnerListBoxItem_Selected" /> <ListBoxItem Content="Inner List Item 4" Selected="InnerListBoxItem_Selected" /> </ListBox> <StackPanel Margin="5" Orientation="Horizontal"> <Label Content="Enter some text:" /> <TextBox MinWidth="150" /> </StackPanel> </ListBox> <TextBlock Text="No item currently selected." Margin="10" HorizontalAlignment="Center" Name="txtSelectedItem" /> </StackPanel> </Window> //File:Window.xaml.cs using System.Windows; using System.Windows.Controls; namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void InnerListBoxItem_Selected(object sender, RoutedEventArgs e) { ListBoxItem item = e.OriginalSource as ListBoxItem; if (item != null) { MessageBox.Show(item.Content + " was selected.", Title); } } private void OuterListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { object item = outerListBox.SelectedItem; if (item == null) { txtSelectedItem.Text = "No item currently selected."; } else { txtSelectedItem.Text = item.ToString(); } } } }
Handles ListBoxItem Selected events for the ListBoxItems in the inner ListBox.
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WPF" Height="300" Width="300"> <StackPanel> <ListBox SelectionChanged="OuterListBox_SelectionChanged" Name="outerListBox"> <ListBoxItem Content="Item 1" FontFamily="Tahoma" HorizontalContentAlignment="Left" /> <ListBoxItem Content="Item 2" FontFamily="Algerian" FontSize="16" HorizontalContentAlignment="Center" /> <ListBoxItem Content="Item 3" FontSize="20" HorizontalContentAlignment="Right" /> <Button Content="Button directly in a list" Margin="5" /> <ListBoxItem HorizontalContentAlignment="Center" Margin="5"> <Button Content="Button wrapped in ListBoxItem" /> </ListBoxItem> <ListBox Height="50" Margin="5"> <ListBoxItem Content="Inner List Item 1" Selected="InnerListBoxItem_Selected" /> <ListBoxItem Content="Inner List Item 2" Selected="InnerListBoxItem_Selected" /> <ListBoxItem Content="Inner List Item 3" Selected="InnerListBoxItem_Selected" /> <ListBoxItem Content="Inner List Item 4" Selected="InnerListBoxItem_Selected" /> </ListBox> <StackPanel Margin="5" Orientation="Horizontal"> <Label Content="Enter some text:" /> <TextBox MinWidth="150" /> </StackPanel> </ListBox> <TextBlock Text="No item currently selected." Margin="10" HorizontalAlignment="Center" Name="txtSelectedItem" /> </StackPanel> </Window> //File:Window.xaml.cs using System.Windows; using System.Windows.Controls; namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void InnerListBoxItem_Selected(object sender, RoutedEventArgs e) { ListBoxItem item = e.OriginalSource as ListBoxItem; if (item != null) { MessageBox.Show(item.Content + " was selected.", Title); } } private void OuterListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { object item = outerListBox.SelectedItem; if (item == null) { txtSelectedItem.Text = "No item currently selected."; } else { txtSelectedItem.Text = item.ToString(); } } } }
Use Panel as a ListBoxItem
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WPF" Height="300" Width="300"> <StackPanel> <ListBox SelectionChanged="OuterListBox_SelectionChanged" Name="outerListBox"> <ListBoxItem Content="Item 1" FontFamily="Tahoma" HorizontalContentAlignment="Left" /> <ListBoxItem Content="Item 2" FontFamily="Algerian" FontSize="16" HorizontalContentAlignment="Center" /> <ListBoxItem Content="Item 3" FontSize="20" HorizontalContentAlignment="Right" /> <Button Content="Button directly in a list" Margin="5" /> <ListBoxItem HorizontalContentAlignment="Center" Margin="5"> <Button Content="Button wrapped in ListBoxItem" /> </ListBoxItem> <ListBox Height="50" Margin="5"> <ListBoxItem Content="Inner List Item 1" Selected="InnerListBoxItem_Selected" /> <ListBoxItem Content="Inner List Item 2" Selected="InnerListBoxItem_Selected" /> <ListBoxItem Content="Inner List Item 3" Selected="InnerListBoxItem_Selected" /> <ListBoxItem Content="Inner List Item 4" Selected="InnerListBoxItem_Selected" /> </ListBox> <StackPanel Margin="5" Orientation="Horizontal"> <Label Content="Enter some text:" /> <TextBox MinWidth="150" /> </StackPanel> </ListBox> <TextBlock Text="No item currently selected." Margin="10" HorizontalAlignment="Center" Name="txtSelectedItem" /> </StackPanel> </Window> //File:Window.xaml.cs using System.Windows; using System.Windows.Controls; namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void InnerListBoxItem_Selected(object sender, RoutedEventArgs e) { ListBoxItem item = e.OriginalSource as ListBoxItem; if (item != null) { MessageBox.Show(item.Content + " was selected.", Title); } } private void OuterListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { object item = outerListBox.SelectedItem; if (item == null) { txtSelectedItem.Text = "No item currently selected."; } else { txtSelectedItem.Text = item.ToString(); } } } }
Create a ListBoxItem, set font, content, add the ListBoxItem to the ListBox
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WPF" Height="300" Width="300"> <StackPanel> <ListBox FontSize="16" Height="150" Margin="5" Name="listBox1" SelectionMode="Extended"> <ListBoxItem>List Item 1</ListBoxItem> <ListBoxItem>List Item 2</ListBoxItem> <ListBoxItem>List Item 3</ListBoxItem> </ListBox> <StackPanel HorizontalAlignment="Center" Orientation="Horizontal"> <Label Content="_New item text:" VerticalAlignment="Center" Target="{Binding ElementName=textBox}" /> <TextBox Margin="5" Name="textBox" MinWidth="120" /> </StackPanel> <StackPanel HorizontalAlignment="Center" Orientation="Horizontal"> <Button Click="btnAddListItem_Click" Content="Add Item" IsDefault="True" Margin="5" Name="btnAddListItem" /> <Button Click="btnDeleteListItem_Click" Content="Delete Items" Margin="5" Name="btnDeleteListItem" /> <Button Click="btnSelectAll_Click" Content="Select All" Margin="5" Name="btnSelectAll" /> </StackPanel> </StackPanel> </Window> //File:Window.xaml.cs using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void btnAddListItem_Click(object sender, RoutedEventArgs e) { if (textBox.Text.Length == 0) { MessageBox.Show("Enter text to add to the list.", Title); } else { ListBoxItem item = new ListBoxItem(); item.Content = textBox.Text; item.IsSelected = true; item.HorizontalAlignment = HorizontalAlignment.Center; item.FontWeight = FontWeights.Bold; item.FontFamily = new FontFamily("Tahoma"); listBox1.Items.Add(item); textBox.Clear(); textBox.Focus(); } } private void btnDeleteListItem_Click(object sender, RoutedEventArgs e) { if (listBox1.SelectedItems.Count == 0) { MessageBox.Show("Select list items to delete.", Title); } else { while (listBox1.SelectedItems.Count > 0) { listBox1.Items.Remove(listBox1.SelectedItems[0]); } } } private void btnSelectAll_Click(object sender, RoutedEventArgs e) { listBox1.SelectAll(); } } }
Select All ListBox Items
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WPF" Height="300" Width="300"> <StackPanel> <ListBox FontSize="16" Height="150" Margin="5" Name="listBox1" SelectionMode="Extended"> <ListBoxItem>List Item 1</ListBoxItem> <ListBoxItem>List Item 2</ListBoxItem> <ListBoxItem>List Item 3</ListBoxItem> </ListBox> <StackPanel HorizontalAlignment="Center" Orientation="Horizontal"> <Label Content="_New item text:" VerticalAlignment="Center" Target="{Binding ElementName=textBox}" /> <TextBox Margin="5" Name="textBox" MinWidth="120" /> </StackPanel> <StackPanel HorizontalAlignment="Center" Orientation="Horizontal"> <Button Click="btnAddListItem_Click" Content="Add Item" IsDefault="True" Margin="5" Name="btnAddListItem" /> <Button Click="btnDeleteListItem_Click" Content="Delete Items" Margin="5" Name="btnDeleteListItem" /> <Button Click="btnSelectAll_Click" Content="Select All" Margin="5" Name="btnSelectAll" /> </StackPanel> </StackPanel> </Window> //File:Window.xaml.cs using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void btnAddListItem_Click(object sender, RoutedEventArgs e) { if (textBox.Text.Length == 0) { MessageBox.Show("Enter text to add to the list.", Title); } else { ListBoxItem item = new ListBoxItem(); item.Content = textBox.Text; item.IsSelected = true; item.HorizontalAlignment = HorizontalAlignment.Center; item.FontWeight = FontWeights.Bold; item.FontFamily = new FontFamily("Tahoma"); listBox1.Items.Add(item); textBox.Clear(); textBox.Focus(); } } private void btnDeleteListItem_Click(object sender, RoutedEventArgs e) { if (listBox1.SelectedItems.Count == 0) { MessageBox.Show("Select list items to delete.", Title); } else { while (listBox1.SelectedItems.Count > 0) { listBox1.Items.Remove(listBox1.SelectedItems[0]); } } } private void btnSelectAll_Click(object sender, RoutedEventArgs e) { listBox1.SelectAll(); } } }