File: System.Activities.Presentation\System\Activities\Presentation\Base\Core\Internal\PropertyEditing\Editors\quickitemtemplateselector.cs
Project: ndp\cdf\src\NetFx40\Tools\System.Activities.Presentation.csproj (System.Activities.Presentation)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
namespace System.Activities.Presentation.Internal.PropertyEditing.Editors 
{
    using System;
    using System.Diagnostics.CodeAnalysis;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media;
 
    using System.Activities.Presentation.Internal.PropertyEditing.FromExpression.Framework.ValueEditors;
 
    // <summary>
    // DataTemplateSelector we use in some instances of ChoiceEditor (namely sub-property editor)
    // to detect whether the given item is being displayed in the popup or as an inline item.
    // Based on that determination, it returns the appropriate DataTemplate.  This is a work-around
    // for the problem where we can't determine which NewItemTypeFactory instantiated a given instance.
    // Hence, we show the instance Type inline the ComboBox and the factory DisplayName in the drop-down.
    // Ideally, we would want to use a different control to handle this scenario.
    // </summary>
    internal class QuickItemTemplateSelector : DataTemplateSelector 
    {
 
        private DataTemplate _popupTemplate;
        private DataTemplate _inlineTemplate;
 
        public DataTemplate PopupTemplate 
        {
            [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
            get { return _popupTemplate; }
            [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
            set { _popupTemplate = value; }
        }
 
        public DataTemplate InlineTemplate 
        {
            [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
            get { return _inlineTemplate; }
            [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
            set { _inlineTemplate = value; }
        }
 
        public override DataTemplate SelectTemplate(object item, DependencyObject container) 
        {
            return HasChoiceEditorParent(container) ? _inlineTemplate : _popupTemplate;
        }
 
        private bool HasChoiceEditorParent(DependencyObject element) 
        {
            while (element != null) 
            {
                element = VisualTreeHelper.GetParent(element);
                if (element != null && typeof(ChoiceEditor).IsAssignableFrom(element.GetType()))
                {
                    return true;
                }
            }
 
            return false;
        }
    }
}