WPF fa largo uso di templates grazie ai quali è a volte possibile evitare la creazione di controlli custom.
L'esempio che segue mostra come modificando il template associato ad una listbox è possibile ottenere una listbox con una microfunzionalità di editing dell'item selezionato.

Template

   1:  <Window.Resources>
   2:      <Style TargetType="{x:Type ListBox}">
   3:        <Setter Property="Template">
   4:          <Setter.Value>
   5:            <ControlTemplate TargetType="{x:Type ListBox}">
   6:              <Border BorderBrush="Red" BorderThickness="2" CornerRadius="0,15,0,15">
   7:                <Grid Margin="{TemplateBinding Padding}">
   8:                  <StackPanel>
   9:                    <TextBlock FontSize="14" Margin="5,5,5,0">
  10:                      <Bold>Selected Value</Bold>
  11:                    </TextBlock>
  12:                    <TextBox Margin="5,0,5,5"
  13:                          Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectedItem.Content, UpdateSourceTrigger=PropertyChanged}" />
  14:                    <ItemsPresenter Margin="5" />
  15:                  </StackPanel>
  16:                </Grid>
  17:              </Border>
  18:            </ControlTemplate>
  19:          </Setter.Value>
  20:        </Setter>
  21:      </Style>
  22:    </Window.Resources>
 
UI
   1:  <Grid>
   2:      <ListBox Margin="10" x:Name="lb1" >
   3:        <ListBoxItem>Uno</ListBoxItem>
   4:        <ListBoxItem>Due</ListBoxItem>
   5:        <ListBoxItem>Tre</ListBoxItem>
   6:        <ListBoxItem>Quattro</ListBoxItem>
   7:      </ListBox>
   8:    </Grid>

Risultato finale