public virtual void GetItemsHostIsCorrectPanel()
        {
            string       name    = "DesiredPanel";
            ItemsControl control = new ItemsControl {
                ItemsSource = new[] { 1, 2, 3, 4, 5 }
            };
            Panel host = null;
            XamlBuilder <ItemsPanelTemplate> builder = new XamlBuilder <ItemsPanelTemplate>
            {
                Children = new List <XamlBuilder>
                {
                    new XamlBuilder <StackPanel> {
                        Name = name
                    }
                }
            };

            control.ItemsPanel = builder.Load();

            TestAsync(
                control,
                () => host = control.GetItemsHost(),
                () => Assert.IsNotNull(host, "Failed to find ItemsHost!"),
                () => Assert.AreEqual(name, host.Name, "ItemsHost name did not match!"));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="OverriddenTimePicker"/> class.
 /// </summary>
 /// <param name="useOverriddenTimeUpDownTemplate">If set to <c>True</c> use overridden time up down template.</param>
 public OverriddenTimePicker(bool useOverriddenTimeUpDownTemplate) : base()
 {
     if (useOverriddenTimeUpDownTemplate)
     {
         XamlBuilder <ControlTemplate> template = new XamlBuilder <ControlTemplate>
         {
             Name = "controlTemplate",
             ExplicitNamespaces = new Dictionary <string, string>
             {
                 {
                     "ctrl", XamlBuilder.GetNamespace(GetType())
                 }
             },
             AttributeProperties = new Dictionary <string, string>
             {
                 {
                     "TargetType", "ctrl:" + GetType().Name
                 }
             },
             Children = new List <XamlBuilder>
             {
                 new XamlBuilder <OverriddenTimeUpDown>
                 {
                     Name = "TimeUpDown"
                 }
             }
         };
         Template = template.Load();
     }
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="OverriddenTimePicker"/> class.
 /// </summary>
 /// <param name="useOverriddenTimeUpDownTemplate">If set to <c>True</c> use overridden time up down template.</param>
 public OverriddenTimePicker(bool useOverriddenTimeUpDownTemplate) : base()
 {
     if (useOverriddenTimeUpDownTemplate)
     {
         XamlBuilder<ControlTemplate> template = new XamlBuilder<ControlTemplate>
                                                     {
                                                             Name = "controlTemplate",
                                                             ExplicitNamespaces = new Dictionary<string, string>
                                                                                      {
                                                                                              {
                                                                                                      "ctrl", XamlBuilder.GetNamespace(GetType())
                                                                                              }
                                                                                      },
                                                             AttributeProperties = new Dictionary<string, string>
                                                                                       {
                                                                                               {
                                                                                                       "TargetType", "ctrl:" + GetType().Name
                                                                                               }
                                                                                       },
                                                             Children = new List<XamlBuilder>
                                                                            {
                                                                                    new XamlBuilder<OverriddenTimeUpDown>
                                                                                        {
                                                                                                Name = "TimeUpDown"
                                                                                        }
                                                                            }
                                                     };
         Template = template.Load();
     }
 }
        public void StyleBackgroundInXaml()
        {
            WrapPanel panel = DefaultWrapPanelToTest;
            panel.Height = 400;
            panel.Width = 600;

            XamlBuilder<Style> styleBuilder = new XamlBuilder<Style>
            {
                ExplicitNamespaces = new Dictionary<string, string> { { "controlsToolkit", XamlBuilder.GetNamespace(typeof(WrapPanel)) } },
                AttributeProperties = new Dictionary<string, string> { { "TargetType", "controlsToolkit:WrapPanel" } },
                Children = new List<XamlBuilder>
                {
                    new XamlBuilder<Setter>
                    {
                        AttributeProperties = new Dictionary<string, string> { { "Property", "Background" } },
                        ElementProperties = new Dictionary<string, XamlBuilder>
                        {
                            {
                                "Value",
                                new XamlBuilder<SolidColorBrush>
                                {
                                    AttributeProperties = new Dictionary<string, string> { { "Color", "Gray" } }
                                }
                            }
                        }
                    }
                }
            };

            TestAsync(
                panel,
                () => panel.Style = styleBuilder.Load());
        }
        public virtual void FindNameWorksOnViewboxChild()
        {
            XamlBuilder xaml = new XamlBuilder <Viewbox>()
            {
                ExplicitNamespaces = new Dictionary <string, string> {
                    { "controls", XamlBuilder.GetNamespace(typeof(Viewbox)) }
                },
                Children = new List <XamlBuilder>
                {
                    new XamlBuilder <TextBlock>
                    {
                        Name = "Foo",
                        AttributeProperties = new Dictionary <string, string> {
                            { "Text", "Test" }
                        }
                    }
                }
            };

            Viewbox   view = xaml.Load() as Viewbox;
            TextBlock text = null;

            TestAsync(
                view,
                () => text = view.FindName("Foo") as TextBlock,
                () => Assert.IsNotNull(text, "Failed to find named Child!"));
        }
Esempio n. 6
0
        public static HierarchicalDataTemplate GetDataTemplate()
        {
            string templateKey = "template";

            // Wrap the template in a Grid because the XAML parser doesn't like
            // namespaces declared on a DataTemplate
            XamlBuilder <Grid> builder = new XamlBuilder <Grid>
            {
                ExplicitNamespaces = new Dictionary <string, string>
                {
                    { "common", XamlBuilder.GetNamespace(typeof(HierarchicalDataTemplate)) },
                    { "ctl", XamlBuilder.GetNamespace(typeof(TreeViewItem)) },
                    { "sys", XamlBuilder.GetNamespace(typeof(int)) }
                },
                ElementProperties = new Dictionary <string, XamlBuilder>
                {
                    {
                        "Resources",
                        new XamlBuilder <HierarchicalDataTemplate>
                        {
                            Key = templateKey,
                            AttributeProperties = new Dictionary <string, string>
                            {
                                { "ItemsSource", "{Binding Children}" }
                            },
                            Children = new List <XamlBuilder>
                            {
                                new XamlBuilder <ContentControl>
                                {
                                    Name = "TemplateContent",
                                    AttributeProperties = new Dictionary <string, string>
                                    {
                                        { "Content", "{Binding Element}" },
                                        { "Foreground", "Red" }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            Grid container = builder.Load();

            return(container.Resources[templateKey] as HierarchicalDataTemplate);
        }
        /// <summary>
        /// Convert the XamlBuilder property into an XElement tree.
        /// </summary>
        /// <param name="name">Name of the property.</param>
        /// <param name="value">Value of the property.</param>
        /// <returns>XElement tree representing the property.</returns>
        private static XElement BuildPropertyElement(XName name, XamlBuilder value)
        {
            XElement wrapper = new XElement(name);

            if (value != null)
            {
                if (!value.IsLiteral)
                {
                    wrapper.Add(value.BuildElement(false));
                }
                else
                {
                    wrapper.SetValue(value.Content);
                }
            }
            return(wrapper);
        }
        public void StyleBackgroundInXaml()
        {
            WrapPanel panel = DefaultWrapPanelToTest;

            panel.Height = 400;
            panel.Width  = 600;

            XamlBuilder <Style> styleBuilder = new XamlBuilder <Style>
            {
                ExplicitNamespaces = new Dictionary <string, string> {
                    { "controlsToolkit", XamlBuilder.GetNamespace(typeof(WrapPanel)) }
                },
                AttributeProperties = new Dictionary <string, string> {
                    { "TargetType", "controlsToolkit:WrapPanel" }
                },
                Children = new List <XamlBuilder>
                {
                    new XamlBuilder <Setter>
                    {
                        AttributeProperties = new Dictionary <string, string> {
                            { "Property", "Background" }
                        },
                        ElementProperties = new Dictionary <string, XamlBuilder>
                        {
                            {
                                "Value",
                                new XamlBuilder <SolidColorBrush>
                                {
                                    AttributeProperties = new Dictionary <string, string> {
                                        { "Color", "Gray" }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            TestAsync(
                panel,
                () => panel.Style = styleBuilder.Load());
        }
        public virtual void GetScrollHostWithNoItemsHost()
        {
            ListBox control = new ListBox {
                ItemsSource = new[] { 1, 2, 3, 4, 5 }
            };
            XamlBuilder <ControlTemplate> builder = new XamlBuilder <ControlTemplate>
            {
                AttributeProperties = new Dictionary <string, string> {
                    { "TargetType", "ListBox" }
                },
                Children = new List <XamlBuilder> {
                    new XamlBuilder <TextBlock>()
                }
            };

            control.Template = builder.Load();
            ScrollViewer host = null;

            TestAsync(
                control,
                () => host = control.GetScrollHost(),
                () => Assert.IsNull(host, "Should not have found ScrollHost!"));
        }
        public virtual void ShouldIgnoreTemplatesSpecificallySet()
        {
            Accordion acc = new Accordion();
            DataTemplate itemTemplate = new XamlBuilder<DataTemplate> { Name = "itemtemplate" } .Load();
            DataTemplate contentTemplate = new XamlBuilder<DataTemplate> { Name = "contenttemplate" } .Load();

            acc.ItemTemplate = itemTemplate;
            acc.ContentTemplate = contentTemplate;

            DataTemplate customHeaderTemplate = new XamlBuilder<DataTemplate> { Name = "customheadertemplate" } .Load();
            DataTemplate customContentTemplate = new XamlBuilder<DataTemplate> { Name = "customcontenttemplate" } .Load();

            AccordionItem withTemplates = new AccordionItem()
            {
                HeaderTemplate = customHeaderTemplate,
                ContentTemplate = customContentTemplate
            };
            AccordionItem withoutTemplates = new AccordionItem();

            TestAsync(
                acc,
                () => acc.Items.Add(withTemplates),
                () => acc.Items.Add(withoutTemplates),
                () => Assert.AreNotEqual(itemTemplate, ((AccordionItem)acc.Items[0]).HeaderTemplate),
                () => Assert.AreNotEqual(contentTemplate, ((AccordionItem)acc.Items[0]).ContentTemplate),
                () => Assert.AreEqual(itemTemplate, ((AccordionItem)acc.Items[1]).HeaderTemplate),
                () => Assert.AreEqual(contentTemplate, ((AccordionItem)acc.Items[1]).ContentTemplate),
                () => Assert.AreEqual(customHeaderTemplate, ((AccordionItem)acc.Items[0]).HeaderTemplate),
                () => Assert.AreEqual(customContentTemplate, ((AccordionItem)acc.Items[0]).ContentTemplate));
        }
        public virtual void ShouldOverrideDisplayMemberPathIfPossible()
        {
            Person a = new Person() { FirstName = "aFirst", LastName = "aLast" };

            Accordion acc = new Accordion();
            acc.DisplayMemberPath = "LastName";
            DataTemplate contentTemplate = new XamlBuilder<DataTemplate> { Name = "contenttemplate" } .Load();

            acc.ContentTemplate = contentTemplate;

            AccordionItem item = null;
            TestAsync(
                acc,
                () => acc.Items.Add(a),
                () => item = GetAccordionItem(acc, a),
                () => Assert.AreEqual(contentTemplate, item.ContentTemplate));
        }
        public virtual void GetItemsHostIsCorrectPanel()
        {
            string name = "DesiredPanel";
            ItemsControl control = new ItemsControl { ItemsSource = new[] { 1, 2, 3, 4, 5 } };
            Panel host = null;
            XamlBuilder<ItemsPanelTemplate> builder = new XamlBuilder<ItemsPanelTemplate>
            {
                Children = new List<XamlBuilder>
                {
                    new XamlBuilder<StackPanel> { Name = name }
                }
            };
            control.ItemsPanel = builder.Load();

            TestAsync(
                control,
                () => host = control.GetItemsHost(),
                () => Assert.IsNotNull(host, "Failed to find ItemsHost!"),
                () => Assert.AreEqual(name, host.Name, "ItemsHost name did not match!"));
        }
        public virtual void ShouldApplyTemplatesWhenGeneratingItems()
        {
            Accordion acc = new Accordion();
            DataTemplate itemTemplate = new XamlBuilder<DataTemplate> { Name = "itemtemplate" } .Load();
            DataTemplate contentTemplate = new XamlBuilder<DataTemplate> { Name = "contenttemplate" } .Load();

            acc.ItemTemplate = itemTemplate;
            acc.ContentTemplate = contentTemplate;

            acc.Items.Add("item 1");

            TestAsync(
                acc,
                () => Assert.AreEqual(itemTemplate, GetAccordionItem(acc, "item 1").HeaderTemplate),
                () => Assert.AreEqual(contentTemplate, GetAccordionItem(acc, "item 1").ContentTemplate));
        }
        public virtual void GetScrollHostWithNoItemsHost()
        {
            ListBox control = new ListBox { ItemsSource = new[] { 1, 2, 3, 4, 5 } };
            XamlBuilder<ControlTemplate> builder = new XamlBuilder<ControlTemplate>
            {
                AttributeProperties = new Dictionary<string, string> { { "TargetType", "ListBox" } },
                Children = new List<XamlBuilder> { new XamlBuilder<TextBlock>() }
            };
            control.Template = builder.Load();
            ScrollViewer host = null;

            TestAsync(
                control,
                () => host = control.GetScrollHost(),
                () => Assert.IsNull(host, "Should not have found ScrollHost!"));
        }
 /// <summary>
 /// Convert the XamlBuilder property into an XElement tree.
 /// </summary>
 /// <param name="name">Name of the property.</param>
 /// <param name="value">Value of the property.</param>
 /// <returns>XElement tree representing the property.</returns>
 private static XElement BuildPropertyElement(XName name, XamlBuilder value)
 {
     XElement wrapper = new XElement(name);
     if (value != null)
     {
         if (!value.IsLiteral)
         {
             wrapper.Add(value.BuildElement(false));
         }
         else
         {
             wrapper.SetValue(value.Content);
         }
     }
     return wrapper;
 }
        public static HierarchicalDataTemplate GetDataTemplate()
        {
            string templateKey = "template";

            // Wrap the template in a Grid because the XAML parser doesn't like
            // namespaces declared on a DataTemplate
            XamlBuilder <Grid> builder = new XamlBuilder <Grid>
            {
                ExplicitNamespaces = new Dictionary <string, string>
                {
                    { "common", XamlBuilder.GetNamespace(typeof(HierarchicalDataTemplate)) },
                    { "local", XamlBuilder.GetNamespace(typeof(FactorizationValueConverter)) }
                },
                ElementProperties = new Dictionary <string, XamlBuilder>
                {
                    {
                        "Resources",
                        new XamlBuilder <FactorizationValueConverter>
                        {
                            Key = "Factorization"
                        }
                    }
                },
                Children = new List <XamlBuilder>
                {
                    new XamlBuilder <Grid>
                    {
                        ElementProperties = new Dictionary <string, XamlBuilder>
                        {
                            {
                                "Resources",
                                new XamlBuilder <HierarchicalDataTemplate>
                                {
                                    Key = templateKey,
                                    AttributeProperties = new Dictionary <string, string>
                                    {
                                        { "ItemsSource", "{Binding Converter={StaticResource Factorization}}" }
                                    },
                                    Children = new List <XamlBuilder>
                                    {
                                        new XamlBuilder <ContentControl>
                                        {
                                            Name = "TemplateContent",
                                            AttributeProperties = new Dictionary <string, string>
                                            {
                                                { "Content", "{Binding}" }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            Grid outer = builder.Load();
            Grid inner = outer.Children[0] as Grid;

            return(inner.Resources[templateKey] as HierarchicalDataTemplate);
        }
        public virtual void ScrollIntoViewNoScrollHost()
        {
            TreeView view = new TreeView();
            TreeViewItem first = new TreeViewItem { Header = "First" };
            TreeViewItem second = new TreeViewItem { Header = 2 };
            view.Items.Add(first);
            view.Items.Add(second);

            TreeViewAutomationPeer viewPeer = null;
            TreeViewItemAutomationPeer firstPeer = null;
            IScrollItemProvider firstProvider = null;
            TreeViewItemAutomationPeer secondPeer = null;
            IScrollItemProvider secondProvider = null;

            // Create a template without a ScrollViewer
            XamlBuilder<ControlTemplate> builder = new XamlBuilder<ControlTemplate>
            {
                ExplicitNamespaces = new Dictionary<string, string> { { "ctls", XamlBuilder.GetNamespace(typeof(TreeView)) } },
                AttributeProperties = new Dictionary<string, string> { { "TargetType", "ctls:TreeView" } },
                Children = new List<XamlBuilder> { new XamlBuilder<ItemsPresenter>() }
            };
            view.Template = builder.Load();

            TestAsync(
                view,
                () => viewPeer = FrameworkElementAutomationPeer.CreatePeerForElement(view) as TreeViewAutomationPeer,
                () => firstPeer = FrameworkElementAutomationPeer.CreatePeerForElement(first) as TreeViewItemAutomationPeer,
                () => secondPeer = FrameworkElementAutomationPeer.CreatePeerForElement(second) as TreeViewItemAutomationPeer,
                () => firstProvider = firstPeer.GetPattern(PatternInterface.ScrollItem) as IScrollItemProvider,
                () => secondProvider = secondPeer.GetPattern(PatternInterface.ScrollItem) as IScrollItemProvider,
                () => firstProvider.ScrollIntoView());
        }
        public virtual void ApplyItemTemplate()
        {
            XamlBuilder<Grid> builder = new XamlBuilder<Grid>
            {
                ExplicitNamespaces = new Dictionary<string, string>
                {
                    { "toolkit", XamlBuilder.GetNamespace(typeof(ObjectCollection)) },
                    { "ctl", XamlBuilder.GetNamespace(typeof(System.Windows.Controls.TreeView)) },
                    { "sys", XamlBuilder.GetNamespace(typeof(int)) },
                },
                ElementProperties = new Dictionary<string, XamlBuilder>
                {
                    {
                        "Resources",
                        new XamlBuilder<DataTemplate>
                        {
                            Key = "template",
                            Children = new List<XamlBuilder>
                            {
                                new XamlBuilder<ContentControl>
                                {
                                    Name = "TemplateContent",
                                    AttributeProperties = new Dictionary<string, string>
                                    {
                                        { "Content", "{Binding}" },
                                        { "Foreground", "Red" }
                                    }
                                }
                            }
                        }
                    }
                },
                Children = new List<XamlBuilder>
                {
                    new XamlBuilder<TreeView>
                    {
                        AttributeProperties = new Dictionary<string, string> { { "ItemTemplate", "{StaticResource template}" } },
                        ElementProperties = new Dictionary<string, XamlBuilder>
                        {
                            {
                                "ItemsSource",
                                new XamlBuilder<ObjectCollection>
                                {
                                    Children = new List<XamlBuilder>
                                    {
                                        new XamlBuilder<int> { Content = "1" },
                                        new XamlBuilder<int> { Content = "2" },
                                        new XamlBuilder<int> { Content = "3" }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            Grid root = builder.Load();
            TreeView view = null;
            TreeViewItem first = null;
            ContentControl header = null;

            TestAsync(
                5,
                root,
                () => view = root.Children[0] as TreeView,
                () => first = view.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem,
                () => Assert.IsNotNull(first, "First item should not be null!"),
                () => Assert.AreEqual(1, first.Header, "Unexpected header!"),
                () => header = first.GetVisualChild("TemplateContent") as ContentControl,
                () => Assert.IsNotNull(header, "Header should not be null!"));
        }
        public static HierarchicalDataTemplate GetDataTemplate()
        {
            string templateKey = "template";

            // Wrap the template in a Grid because the XAML parser doesn't like
            // namespaces declared on a DataTemplate
            XamlBuilder<Grid> builder = new XamlBuilder<Grid>
            {
                ExplicitNamespaces = new Dictionary<string, string>
                {
                    { "common", XamlBuilder.GetNamespace(typeof(HierarchicalDataTemplate)) },
                    { "local", XamlBuilder.GetNamespace(typeof(FactorizationValueConverter)) }
                },
                ElementProperties = new Dictionary<string, XamlBuilder>
                {
                    {
                        "Resources",
                        new XamlBuilder<FactorizationValueConverter>
                        {
                            Key = "Factorization"
                        }
                    }
                },
                Children = new List<XamlBuilder>
                {
                    new XamlBuilder<Grid>
                    {
                        ElementProperties = new Dictionary<string, XamlBuilder>
                        {
                            {
                                "Resources",
                                new XamlBuilder<HierarchicalDataTemplate>
                                {
                                    Key = templateKey,
                                    AttributeProperties = new Dictionary<string, string>
                                    {
                                        { "ItemsSource", "{Binding Converter={StaticResource Factorization}}" }
                                    },
                                    Children = new List<XamlBuilder>
                                    {
                                        new XamlBuilder<ContentControl>
                                        {
                                            Name = "TemplateContent",
                                            AttributeProperties = new Dictionary<string, string>
                                            {
                                                { "Content", "{Binding}" }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }                
            };
            
            Grid outer = builder.Load();
            Grid inner = outer.Children[0] as Grid;
            return inner.Resources[templateKey] as HierarchicalDataTemplate;
        }
Esempio n. 20
0
        public static HierarchicalDataTemplate GetDataTemplate()
        {
            string templateKey = "template";

            // Wrap the template in a Grid because the XAML parser doesn't like
            // namespaces declared on a DataTemplate
            XamlBuilder<Grid> builder = new XamlBuilder<Grid>
            {
                ExplicitNamespaces = new Dictionary<string, string>
                {
                    { "common", XamlBuilder.GetNamespace(typeof(HierarchicalDataTemplate)) },
                    { "ctl", XamlBuilder.GetNamespace(typeof(TreeViewItem)) },
                    { "sys", XamlBuilder.GetNamespace(typeof(int)) }
                },
                ElementProperties = new Dictionary<string, XamlBuilder>
                {
                    {
                        "Resources",
                        new XamlBuilder<HierarchicalDataTemplate>
                        {
                            Key = templateKey,
                            AttributeProperties = new Dictionary<string, string>
                            {
                                { "ItemsSource", "{Binding Children}" }
                            },
                            Children = new List<XamlBuilder>
                            {
                                new XamlBuilder<ContentControl>
                                {
                                    Name = "TemplateContent",
                                    AttributeProperties = new Dictionary<string, string>
                                    {
                                        { "Content", "{Binding Element}" },
                                        { "Foreground", "Red" }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            Grid container = builder.Load();
            return container.Resources[templateKey] as HierarchicalDataTemplate;
        }
        public virtual void ApplyHierarchicalDataTemplateThenSetStyle()
        {
            XamlBuilder<Grid> builder = new XamlBuilder<Grid>
            {
                ExplicitNamespaces = new Dictionary<string, string>
                {
                    { "common", XamlBuilder.GetNamespace(typeof(HierarchicalDataTemplate)) },
                    { "ctl", XamlBuilder.GetNamespace(typeof(TreeViewItem)) },
                    { "sys", XamlBuilder.GetNamespace(typeof(int)) }
                },
                ElementProperties = new Dictionary<string, XamlBuilder>
                {
                    {
                        "Resources",
                        new XamlBuilder<HierarchicalDataTemplate>
                        {
                            Key = "template",
                            AttributeProperties = new Dictionary<string, string> { { "ItemsSource", "{Binding Children}" } },
                            Children = new List<XamlBuilder>
                            {
                                new XamlBuilder<ContentControl>
                                {
                                    Name = "TemplateContent",
                                    AttributeProperties = new Dictionary<string, string>
                                    {
                                        { "Content", "{Binding Element}" }
                                    }
                                }
                            }
                        }
                    }
                },
                Children = new List<XamlBuilder>
                {
                    new XamlBuilder<TreeView>
                    {
                        AttributeProperties = new Dictionary<string, string> { { "ItemTemplate", "{StaticResource template}" } },
                    }
                }
            };

            Grid root = builder.Load();
            TreeView view = null;
            TreeViewItem item = null;

            List<Hierarchy> items = new List<Hierarchy>()
            {
                new Hierarchy { Element = "Brush" },
                new Hierarchy { Element = "Style" },
                new Hierarchy
                {
                    Element = "UIElement",
                    Children = new Collection<Hierarchy>
                    {
                        new Hierarchy
                        {
                            Element = "FrameworkElement",
                            Children = new Collection<Hierarchy>
                            {
                                new Hierarchy
                                {
                                    Element = "Control",
                                    Children = new Collection<Hierarchy>
                                    {
                                        new Hierarchy { Element = "TextBox" }
                                    }
                                }
                            }
                        }
                    }
                },
                new Hierarchy { Element = "VisualStateManager" }
            };

            Style outerStyle = new Style(typeof(TreeViewItem));
            outerStyle.Setters.Add(new Setter(TreeViewItem.FontSizeProperty, 20.0));

            Style innerStyle = new Style(typeof(TreeViewItem));
            innerStyle.Setters.Add(new Setter(TreeViewItem.FontSizeProperty, 10.0));

            TestAsync(
                5,
                root,
                () => view = root.Children[0] as TreeView,
                () => view.ItemsSource = items,
                () => item = view.ItemContainerGenerator.ContainerFromIndex(2) as TreeViewItem,
                () => item.IsExpanded = true,
                () => item = item.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem,
                () => item.IsExpanded = true,
                () => view.ItemContainerStyle = outerStyle,
                () => item = item.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem,
                () => item.IsExpanded = true,
                () => item.ItemContainerStyle = innerStyle,
                () => item.ItemContainerStyle = null);
        }
        public virtual void ApplyHierarchicalDataTemplateWithItemTemplate()
        {
            XamlBuilder<Grid> builder = new XamlBuilder<Grid>
            {
                ExplicitNamespaces = new Dictionary<string, string>
                {
                    { "common", XamlBuilder.GetNamespace(typeof(HierarchicalDataTemplate)) },
                    { "ctl", XamlBuilder.GetNamespace(typeof(TreeViewItem)) },
                    { "sys", XamlBuilder.GetNamespace(typeof(int)) }
                },
                ElementProperties = new Dictionary<string, XamlBuilder>
                {
                    {
                        "Resources",
                        new XamlBuilder<DataTemplate>
                        {
                            Key = "itemTemplate",
                            Children = new List<XamlBuilder>
                            {
                                new XamlBuilder<ContentControl>
                                {
                                    Name = "TemplateContent",
                                    AttributeProperties = new Dictionary<string, string>
                                    {
                                        { "Content", "{Binding Element}" },
                                        { "FontWeight", "Bold" }
                                    }
                                }
                            }
                        }
                    }
                },
                Children = new List<XamlBuilder>
                {
                    new XamlBuilder<Grid>
                    {
                        ElementProperties = new Dictionary<string, XamlBuilder>
                        {
                            {
                                "Resources",
                                new XamlBuilder<HierarchicalDataTemplate>
                                {
                                    Key = "template",
                                    AttributeProperties = new Dictionary<string, string>
                                    {
                                        { "ItemsSource", "{Binding Children}" },
                                        { "ItemTemplate", "{StaticResource itemTemplate}" }
                                    },
                                    Children = new List<XamlBuilder>
                                    {
                                        new XamlBuilder<ContentControl>
                                        {
                                            Name = "TemplateContent",
                                            AttributeProperties = new Dictionary<string, string>
                                            {
                                                { "Content", "{Binding Element}" },
                                                { "FontStyle", "Italic" }
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        Children = new List<XamlBuilder>
                        {
                            new XamlBuilder<TreeView>
                            {
                                AttributeProperties = new Dictionary<string, string>
                                {
                                    { "ItemTemplate", "{StaticResource template}" }
                                },
                            }
                        }
                    }
                }
            };

            Grid root = builder.Load();
            TreeView view = null;
            TreeViewItem item = null;

            List<Hierarchy> items = new List<Hierarchy>()
            {
                new Hierarchy { Element = "Brush" },
                new Hierarchy { Element = "Style" },
                new Hierarchy
                {
                    Element = "UIElement",
                    Children = new Collection<Hierarchy>
                    {
                        new Hierarchy
                        {
                            Element = "FrameworkElement",
                            Children = new Collection<Hierarchy>
                            {
                                new Hierarchy
                                {
                                    Element = "Control",
                                    Children = new Collection<Hierarchy>
                                    {
                                        new Hierarchy { Element = "TextBox" }
                                    }
                                }
                            }
                        }
                    }
                },
                new Hierarchy { Element = "VisualStateManager" }
            };

            TestAsync(
                5,
                root,
                () => view = (root.Children[0] as Grid).Children[0] as TreeView,
                () => view.ItemsSource = items,
                () => item = view.ItemContainerGenerator.ContainerFromIndex(2) as TreeViewItem,
                () => item.IsExpanded = true,
                () => item = item.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem,
                () => Assert.AreEqual(0, item.Items.Count, "Only the first level should have nested items!"));
        }
        public virtual void ApplyHierarchicalDataTemplateWithStyle()
        {
            XamlBuilder<Grid> builder = new XamlBuilder<Grid>
            {
                ExplicitNamespaces = new Dictionary<string, string>
                {
                    { "common", XamlBuilder.GetNamespace(typeof(HierarchicalDataTemplate)) },
                    { "ctl", XamlBuilder.GetNamespace(typeof(TreeViewItem)) },
                    { "sys", XamlBuilder.GetNamespace(typeof(int)) }
                },
                ElementProperties = new Dictionary<string, XamlBuilder>
                {
                    {
                        "Resources",
                        new XamlBuilder<Style>
                        {
                            Key = "itemStyle",
                            AttributeProperties = new Dictionary<string, string> { { "TargetType", "ctl:TreeViewItem" } },
                            Children = new List<XamlBuilder>
                            {
                                new XamlBuilder<Setter>
                                {
                                    AttributeProperties = new Dictionary<string, string> 
                                    {
                                        { "Property", "FontSize" },
                                        { "Value", "15" }
                                    }
                                }
                            }
                        }
                    }
                },
                Children = new List<XamlBuilder>
                {
                    new XamlBuilder<Grid>
                    {
                        ElementProperties = new Dictionary<string, XamlBuilder>
                        {
                            {
                                "Resources",
                                new XamlBuilder<HierarchicalDataTemplate>
                                {
                                    Key = "template",
                                    AttributeProperties = new Dictionary<string, string>
                                    {
                                        { "ItemsSource", "{Binding Children}" },
                                        { "ItemContainerStyle", "{StaticResource itemStyle}" }
                                    },
                                    Children = new List<XamlBuilder>
                                    {
                                        new XamlBuilder<ContentControl>
                                        {
                                            Name = "TemplateContent",
                                            AttributeProperties = new Dictionary<string, string>
                                            {
                                                { "Content", "{Binding Element}" }
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        Children = new List<XamlBuilder>
                        {
                            new XamlBuilder<TreeView>
                            {
                                AttributeProperties = new Dictionary<string, string>
                                {
                                    { "ItemTemplate", "{StaticResource template}" },
                                    { "ItemContainerStyle", "{StaticResource itemStyle}" }
                                },
                            }
                        }
                    }
                }
            };

            Grid root = builder.Load();
            TreeView view = null;
            TreeViewItem item = null;

            List<Hierarchy> items = new List<Hierarchy>()
            {
                new Hierarchy { Element = "Brush" },
                new Hierarchy { Element = "Style" },
                new Hierarchy
                {
                    Element = "UIElement",
                    Children = new Collection<Hierarchy>
                    {
                        new Hierarchy
                        {
                            Element = "FrameworkElement",
                            Children = new Collection<Hierarchy>
                            {
                                new Hierarchy
                                {
                                    Element = "Control",
                                    Children = new Collection<Hierarchy>
                                    {
                                        new Hierarchy { Element = "TextBox" }
                                    }
                                }
                            }
                        }
                    }
                },
                new Hierarchy { Element = "VisualStateManager" }
            };

            TestAsync(
                5,
                root,
                () => view = (root.Children[0] as Grid).Children[0] as TreeView,
                () => view.ItemsSource = items,
                () => item = view.ItemContainerGenerator.ContainerFromIndex(2) as TreeViewItem,
                () => Assert.AreEqual(15.0, item.FontSize, "Style not applied to first item!"),
                () => item.IsExpanded = true,
                () => item = item.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem,
                () => Assert.AreEqual(15.0, item.FontSize, "Style not applied to second item!"),
                () => item.IsExpanded = true,
                () => item = item.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem,
                () => Assert.AreEqual(15.0, item.FontSize, "Style not applied to third item!"),
                () => item.IsExpanded = true);
        }
        public virtual void ApplyHierarchicalDataTemplate()
        {
            XamlBuilder<Grid> builder = new XamlBuilder<Grid>
            {
                ExplicitNamespaces = new Dictionary<string, string>
                {
                    { "common", XamlBuilder.GetNamespace(typeof(HierarchicalDataTemplate)) },
                    { "ctl", XamlBuilder.GetNamespace(typeof(TreeViewItem)) },
                    { "sys", XamlBuilder.GetNamespace(typeof(int)) }
                },
                ElementProperties = new Dictionary<string, XamlBuilder>
                {
                    {
                        "Resources",
                        new XamlBuilder<HierarchicalDataTemplate>
                        {
                            Key = "template",
                            AttributeProperties = new Dictionary<string, string> { { "ItemsSource", "{Binding Children}" } },
                            Children = new List<XamlBuilder>
                            {
                                new XamlBuilder<ContentControl>
                                {
                                    Name = "TemplateContent",
                                    AttributeProperties = new Dictionary<string, string>
                                    {
                                        { "Content", "{Binding Element}" },
                                        { "Foreground", "Red" }
                                    }
                                }
                            }
                        }
                    }
                },
                Children = new List<XamlBuilder>
                {
                    new XamlBuilder<TreeView>
                    {
                        AttributeProperties = new Dictionary<string, string> { { "ItemTemplate", "{StaticResource template}" } },
                    }
                }
            };

            Grid root = builder.Load();
            TreeView view = null;
            TreeViewItem item = null;
            Hierarchy textbox = null;

            List<Hierarchy> items = new List<Hierarchy>()
            {
                new Hierarchy { Element = "Brush" },
                new Hierarchy { Element = "Style" },
                new Hierarchy
                {
                    Element = "UIElement",
                    Children = new Collection<Hierarchy>
                    {
                        new Hierarchy
                        {
                            Element = "FrameworkElement",
                            Children = new Collection<Hierarchy>
                            {
                                new Hierarchy
                                {
                                    Element = "Control",
                                    Children = new Collection<Hierarchy>
                                    {
                                        new Hierarchy { Element = "TextBox" }
                                    }
                                }
                            }
                        }
                    }
                },
                new Hierarchy { Element = "VisualStateManager" }
            };

            TestAsync(
                5,
                root,
                () => view = root.Children[0] as TreeView,
                () => view.ItemsSource = items,
                () => item = view.ItemContainerGenerator.ContainerFromIndex(2) as TreeViewItem,
                () => item.IsExpanded = true,
                () => item = item.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem,
                () => item.IsExpanded = true,
                () => item = item.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem,
                () => item.IsExpanded = true,
                () => item = item.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem,
                () => textbox = item.Header as Hierarchy,
                () => Assert.IsNotNull(textbox, "TextBox reference should not be null!"),
                () => Assert.AreEqual("TextBox", textbox.Element, "Unexpected Element!"));
        }
        public virtual void ShouldAllowTemplateWithUIElements()
        {
            // this tests adds back the coverage lost by the exclusion of
            // test: Content*DataTemplateWithUIElementsFails (see GetDPTests())
            AccordionItem instance = new AccordionItem();
            instance.Width = 300;
            instance.Height = 300;

            TestAsync(
                    instance,
                    () =>
                        {
                            StackPanel element = new StackPanel();
                            element.SetValue(FrameworkElement.NameProperty, "UIElementContent");
                            element.Children.Add(new Ellipse
                                                     {
                                                             Fill = new SolidColorBrush(Colors.Red),
                                                             Width = 20,
                                                             Height = 20
                                                     });
                            element.Children.Add(new TextBlock
                                                     {
                                                             Text = "UIElement Content"
                                                     });
                            element.Children.Add(new Ellipse
                                                     {
                                                             Fill = new SolidColorBrush(Colors.Blue),
                                                             Width = 20,
                                                             Height = 20
                                                     });
                            instance.SetValue(ContentControl.ContentProperty, element);
                        },
                    () => instance.IsSelected = true,
                () =>
                {
                    // Create the DataTemplate
                    XamlBuilder<DataTemplate> xamlTemplate = new XamlBuilder<DataTemplate>
                    {
                        Name = "template",
                        Children = new List<XamlBuilder>
                        {
                            new XamlBuilder<StackPanel>
                            {
                                Children = new List<XamlBuilder>
                                {
                                    new XamlBuilder<StackPanel>
                                    {
                                        AttributeProperties = new Dictionary<string, string> { { "Orientation", "Horizontal" } },
                                        Children = new List<XamlBuilder>
                                        {
                                            new XamlBuilder<TextBlock>
                                            {
                                                AttributeProperties = new Dictionary<string, string> { { "Text", "{}{Binding Name}:  " } }
                                            },
                                            new XamlBuilder<TextBlock>
                                            {
                                                Name = "nameBinding",
                                                AttributeProperties = new Dictionary<string, string> { { "Text", "{Binding Name}" } }
                                            }
                                        }
                                    },
                                    new XamlBuilder<StackPanel>
                                    {
                                        AttributeProperties = new Dictionary<string, string> { { "Orientation", "Horizontal" } },
                                        Children = new List<XamlBuilder>
                                        {
                                            new XamlBuilder<TextBlock>
                                            {
                                                AttributeProperties = new Dictionary<string, string> { { "Text", "{}{Binding}:  " } }
                                            },
                                            new XamlBuilder<ContentControl>
                                            {
                                                Name = "contentBinding",
                                                AttributeProperties = new Dictionary<string, string> { { "Content", "{Binding}" } }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    };

                    // Generate the DataTemplate and set it
                    instance.SetValue(ContentControl.ContentTemplateProperty, xamlTemplate.Load());
                },
                () =>
                {
                    // Verify the bindings didn't work
                    TextBlock text = instance.GetVisualChild("nameBinding") as TextBlock;
                    Assert.IsNotNull(text, "Failed to find nameBinding TextBlock!");
                    TestExtensions.AssertIsNullOrEmpty(text.Text);

                    ContentControl content = instance.GetVisualChild("contentBinding") as ContentControl;
                    Assert.IsNotNull(content, "Failed to find contentBinding ContentControl!");
                    Assert.IsNull(content.Content, "The bound Content should be null!");
                });
        }
        public virtual void ShouldAllowTemplateWithUIElements()
        {
            // this tests adds back the coverage lost by the exclusion of
            // test: Content*DataTemplateWithUIElementsFails (see GetDPTests())
            AccordionItem instance = new AccordionItem();

            instance.Width  = 300;
            instance.Height = 300;

            TestAsync(
                instance,
                () =>
            {
                StackPanel element = new StackPanel();
                element.SetValue(FrameworkElement.NameProperty, "UIElementContent");
                element.Children.Add(new Ellipse
                {
                    Fill   = new SolidColorBrush(Colors.Red),
                    Width  = 20,
                    Height = 20
                });
                element.Children.Add(new TextBlock
                {
                    Text = "UIElement Content"
                });
                element.Children.Add(new Ellipse
                {
                    Fill   = new SolidColorBrush(Colors.Blue),
                    Width  = 20,
                    Height = 20
                });
                instance.SetValue(ContentControl.ContentProperty, element);
            },
                () => instance.IsSelected = true,
                () =>
            {
                // Create the DataTemplate
                XamlBuilder <DataTemplate> xamlTemplate = new XamlBuilder <DataTemplate>
                {
                    Name     = "template",
                    Children = new List <XamlBuilder>
                    {
                        new XamlBuilder <StackPanel>
                        {
                            Children = new List <XamlBuilder>
                            {
                                new XamlBuilder <StackPanel>
                                {
                                    AttributeProperties = new Dictionary <string, string> {
                                        { "Orientation", "Horizontal" }
                                    },
                                    Children = new List <XamlBuilder>
                                    {
                                        new XamlBuilder <TextBlock>
                                        {
                                            AttributeProperties = new Dictionary <string, string> {
                                                { "Text", "{}{Binding Name}:  " }
                                            }
                                        },
                                        new XamlBuilder <TextBlock>
                                        {
                                            Name = "nameBinding",
                                            AttributeProperties = new Dictionary <string, string> {
                                                { "Text", "{Binding Name}" }
                                            }
                                        }
                                    }
                                },
                                new XamlBuilder <StackPanel>
                                {
                                    AttributeProperties = new Dictionary <string, string> {
                                        { "Orientation", "Horizontal" }
                                    },
                                    Children = new List <XamlBuilder>
                                    {
                                        new XamlBuilder <TextBlock>
                                        {
                                            AttributeProperties = new Dictionary <string, string> {
                                                { "Text", "{}{Binding}:  " }
                                            }
                                        },
                                        new XamlBuilder <ContentControl>
                                        {
                                            Name = "contentBinding",
                                            AttributeProperties = new Dictionary <string, string> {
                                                { "Content", "{Binding}" }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                };

                // Generate the DataTemplate and set it
                instance.SetValue(ContentControl.ContentTemplateProperty, xamlTemplate.Load());
            },
                () =>
            {
                // Verify the bindings didn't work
                TextBlock text = instance.GetVisualChild("nameBinding") as TextBlock;
                Assert.IsNotNull(text, "Failed to find nameBinding TextBlock!");
                TestExtensions.AssertIsNullOrEmpty(text.Text);

                ContentControl content = instance.GetVisualChild("contentBinding") as ContentControl;
                Assert.IsNotNull(content, "Failed to find contentBinding ContentControl!");
                Assert.IsNull(content.Content, "The bound Content should be null!");
            });
        }