Here's a sample I recently posted on Code Project:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2006"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
x:Class="GameSampleApp.Window1"
x:Name="Window"
Title="Sample App"
Width="380" Height="240">
<Window.Resources>
<Style TargetType="ListBox">
<Setter Property="Control.FontFamily" Value="Tahoma" />
<Setter Property="Control.FontSize" Value="10" />
</Style>
<Style x:Key="FontStyle">
<Setter Property="Control.FontFamily" Value="Verdana" />
<Setter Property="Control.FontStyle" Value="Italic" />
<Setter Property="Control.FontSize" Value="12"/>
</Style>
<DataTemplate x:Key="GamePersonTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Width="40" Grid.Column="0" Text="{Binding Name, Mode=OneWay}" />
</Grid>
</DataTemplate>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<ListBox Padding="3" HorizontalAlignment="Left" Width="Auto"
ItemTemplate="{DynamicResource GamePersonTemplate}"
ItemsSource="{Binding}" VerticalAlignment="Top" Height="Auto"/>
</Grid>
</Window>
In this sample, I set the ItemsSource to point to the datacontext binding, which could be anywhere up the visual tree. The item template is defined in the Window.Resources, but could just as well be defined in a separate ResourceDictionary. Basically, this items template is going to show a single textblock for each item row, but it could be made to be much more complicated if necessary; that's the beauty of WPF.