public static IEnumerable<Item> GetItemsByTemplate(TemplateItem template, Item root)
 {
     var usages = template.GetUsageIDs();
     foreach (var usage in usages)
     {
         var item = template.Database.GetItem(usage);
         if (item != null && (root == null || root.Axes.IsAncestorOf(item)))
             yield return item;
     }
 }