Si vous "flexez" un peu, j'imagine que vous avez déjà implémenté vos propres itemRenderers pour divers composants. Au cas où, un petit rappel :

Créez un nouveau composant, héritant de HBox par exemple. Placez-y un Label, et une Image, puis dans votre composant (ici List) utilisez la propriété itemRenderer afin de spécifier votre composant comme item de votre liste. La variable data équivaut à l'élément actuel de votre dataProvider.

Composant ItemRenderer :

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" 
	width="100%">
	<mx:Script>
		<![CDATA[
			import inc.PhotographeEvent;
			public var test:Boolean = false;
		]]>
	</mx:Script>
	<mx:Label
		id="nomPhotographe"
		text="{data.nom}"/>
	<mx:Image 
		buttonMode="true"
		useHandCursor="true"
		source="@Embed('../assets/icon/edit.gif')"
		click="dispatchEvent(new PhotographeEvent(PhotographeEvent.EDIT_PHOTOGRAPHE))"/>
</mx:HBox>

Votre liste :

<mx:List
	id="maListe"
	width="100%"
	height="100%"
	itemRenderer="{new ClassFactory(PhotographeRenderer)}"
	doubleClickEnabled="true"
	itemDoubleClick="goPageCategories(event);"
	dataProvider="{arrayPhotographes}"/>

Vous remarquez que nous utilisons une ClassFactory pour instancier notre itemRenderer... Cette classe génère une instance d'une autre classe, un peu comme un singleton, mais au lieu d'avoir q'une seule instance, il y'en a plusieurs. Sa particularité est que lors d'un changement d'état d'une propriété, ce changement sera répercuté sur toutes les instances.
Dans le cas de notre itemRenderer, nous allons créer pour chaque item un renderer. Dès que l'on souhaitera modifier une propriété d'un renderer en utilisant la ClassFactory, cette propriété sera changée sur tous nos renderer. Voici comment procéder :

var monPhotograheRenderer = new ClassFactory(PhotographeRenderer);
monPhotograheRenderer.properties = { test: true };
maListe.itemRenderer = monPhotograheRenderer;

Maintenant que nous avons vu comment créer nos propres itemRenderer pour divers composants, voyons voir comment cela se passe pour un Tree. En effet, chaque item d'un Tree possède quelques fonctionnalités en plus comme le fait d'afficher ses sous-items...
Ainsi, afin de garder ces particularités, nous créons notre ItemRenderer en héritant de TreeItemRenderer.
Puis, pour ajouter une icône d'édition (comme sur l'image ci-dessus), nous surchagons la méthode createChildren() et ajoutons notre image dans la DisplayList en utilisant addChild(). Afin de la positionner, nous surchagons la méthode updateDisplayList() et affectons des données aux propriétés x et y de notre image. Les comportements doivent être implémentés dans cette méthode (ici l'ajout découteur aux clicks).
Ainsi, il faut distinguer les deux étapes, création de l'objet puis ajout des propriétés et comportements. Faites attention à positionner la méthode super.createChildren avant la création de vos objets (enfin tout dépend de ce que vous souhaitez faire...).

package renderer {

	import flash.events.MouseEvent;
	import inc.CategorieEvent;
	import mx.collections.*;
	import mx.controls.Image;
	import mx.controls.treeClasses.*;
	
	public class CategorieRenderer extends TreeItemRenderer {
		
		private var editImg:Image;
		
		[Embed(source="../assets/icon/edit.gif")] private var editIcon:Class;
	
		public function CategorieRenderer() {
		    super();	
		}
		
		override protected function createChildren():void {
                super.createChildren();
				
				editImg = new Image();
				editImg.source =  editIcon;
				editImg.width = editImg.height = 16;
				addChild(editImg);	
        }
        
        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
			super.updateDisplayList(unscaledWidth, unscaledHeight);
			
			if (super.data) {
				editImg.x = deleteImg.x + deleteImg.width + 2;
				editImg.buttonMode = true;
				editImg.useHandCursor = true;
				editImg.addEventListener(MouseEvent.CLICK,onEditClick);		
			}
		}
		
		private function onEditClick(evt:MouseEvent):void {
			dispatchEvent(new CategorieEvent(CategorieEvent.EDIT_CATEGORIE));
		}
		
	}
}

En conclusion, un hors sujet : Pourquoi les télécommandes de nos téléviseurs sont encore composées de chiffres alors que les chaînes TV sont définies par des noms et presque plus par des numéros...?