using System.Windows; using System.Windows.Controls; using Caliburn.Controls.Transitions; namespace Caliburn.Controls { public class PresenterHostSelector : DataTemplateSelector { private TransitionBase _transition; private TransitionSelector _transitionSelector; public TransitionBase Transition { get { return _transition; } set { _transition = value; } } public TransitionSelector TransitionSelector { get { return _transitionSelector; } set { _transitionSelector = value; } } public override DataTemplate SelectTemplate(object item, DependencyObject container) { DataTemplate template = new DataTemplate(); FrameworkElementFactory hostFactory = new FrameworkElementFactory(typeof(PresenterHost)); hostFactory.SetValue(PresenterHost.PresenterProperty, item); if(Transition != null) hostFactory.SetValue(PresenterHost.TransitionProperty, Transition); else if(TransitionSelector != null) hostFactory.SetValue(PresenterHost.TransitionSelectorProperty, TransitionSelector); template.VisualTree = hostFactory; return template; } } }