Skip to content

Commit

Permalink
Treeview: Fix Background API not being applied to TreeView UI. (#3016)
Browse files Browse the repository at this point in the history
* Add Background template binding to the TreeViewList  to take up the set background for the TreeView.

* Add API test.

* Replaced local FindVisualChildByName implementation with the one provided for us by the VisualTreeUtils class.
  • Loading branch information
Felix-Dev committed Jul 31, 2020
1 parent 65e3204 commit e51202a
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 31 deletions.
60 changes: 29 additions & 31 deletions dev/TreeView/APITests/TreeViewTests.cs
Expand Up @@ -115,7 +115,7 @@ public void TreeViewClearAndSetAtTest()
Content = treeView;
Content.UpdateLayout();
var listControl = FindVisualChildByName(treeView, "ListControl") as TreeViewList;
var listControl = VisualTreeUtils.FindVisualChildByName(treeView, "ListControl") as TreeViewList;
// Verify TreeViewNode::SetAt
TreeViewNode setAtChildCheckNode = new TreeViewNode() { Content = "Set At Child" };
TreeViewNode setAtRootCheckNode = new TreeViewNode() { Content = "Set At Root" };
Expand Down Expand Up @@ -207,7 +207,7 @@ public void TreeViewUpdateTest()
var treeView = new TreeView();
Content = treeView;
Content.UpdateLayout();
var listControl = FindVisualChildByName(treeView, "ListControl") as TreeViewList;
var listControl = VisualTreeUtils.FindVisualChildByName(treeView, "ListControl") as TreeViewList;
treeView.RootNodes.Add(treeViewNode1);
Verify.AreEqual(listControl.Items.Count, 1);
Expand Down Expand Up @@ -278,7 +278,7 @@ public void VerifyClearingNodeWithNoChildren()
Content = treeView;
Content.UpdateLayout();
var listControl = FindVisualChildByName(treeView, "ListControl") as TreeViewList;
var listControl = VisualTreeUtils.FindVisualChildByName(treeView, "ListControl") as TreeViewList;
treeView.RootNodes.Add(treeViewNode1);
var children = (treeViewNode1.Children as IObservableVector<TreeViewNode>);
children.VectorChanged += (vector, args) =>
Expand Down Expand Up @@ -335,7 +335,7 @@ public void TreeViewItemTemplateTest()
treeView.ItemTemplate = dataTemplate;
var node = new TreeViewNode();
treeView.RootNodes.Add(node);
var listControl = FindVisualChildByName(treeView, "ListControl") as TreeViewList;
var listControl = VisualTreeUtils.FindVisualChildByName(treeView, "ListControl") as TreeViewList;
var treeViewItem = listControl.ContainerFromItem(node) as TreeViewItem;
Verify.AreEqual(treeViewItem.ContentTemplate, dataTemplate);
};
Expand Down Expand Up @@ -376,7 +376,7 @@ public void TreeViewItemContainerStyleTest()
treeView.ItemContainerStyle = style;
var node = new TreeViewNode();
treeView.RootNodes.Add(node);
var listControl = FindVisualChildByName(treeView, "ListControl") as TreeViewList;
var listControl = VisualTreeUtils.FindVisualChildByName(treeView, "ListControl") as TreeViewList;
var treeViewItem = listControl.ContainerFromItem(node) as TreeViewItem;
Verify.AreEqual(treeViewItem.Style, style);
};
Expand All @@ -398,7 +398,7 @@ public void TreeViewItemContainerTransitionTest()
treeView.ItemContainerTransitions = transition;
var node = new TreeViewNode();
treeView.RootNodes.Add(node);
var listControl = FindVisualChildByName(treeView, "ListControl") as TreeViewList;
var listControl = VisualTreeUtils.FindVisualChildByName(treeView, "ListControl") as TreeViewList;
var treeViewItem = listControl.ContainerFromItem(node) as TreeViewItem;
Verify.AreEqual(treeViewItem.ContentTransitions, transition);
};
Expand Down Expand Up @@ -710,38 +710,36 @@ public void RemovingLastChildrenSetsIsExpandedToFalse()
});
}

private bool IsMultiSelectCheckBoxChecked(TreeView tree, TreeViewNode node)
{
var treeViewItem = tree.ContainerFromNode(node) as TreeViewItem;
var checkBox = FindVisualChildByName(treeViewItem, "MultiSelectCheckBox") as CheckBox;
return checkBox.IsChecked == true;
}

public static DependencyObject FindVisualChildByName(FrameworkElement parent, string name)
[TestMethod]
public void TreeViewBackgroundTest()
{
if (parent.Name == name)
RunOnUIThread.Execute(() =>
{
return parent;
}
var treeView = new TreeView();
int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
Content = treeView;
Content.UpdateLayout();
for (int i = 0; i < childrenCount; i++)
{
FrameworkElement childAsFE = VisualTreeHelper.GetChild(parent, i) as FrameworkElement;
var treeViewList = VisualTreeUtils.FindVisualChildByName(treeView, "ListControl") as TreeViewList;
if (childAsFE != null)
{
DependencyObject result = FindVisualChildByName(childAsFE, name);
// Make sure the TreeViewList does not already have the background color we are using for this test.
bool testCondition = treeViewList.Background is SolidColorBrush brush && brush.Color == Colors.Green;
Verify.IsFalse(testCondition, "The default TreeView background color should not match the test color used.");
if (result != null)
{
return result;
}
}
}
// Check if the Background API affects the TreeView control.
treeView.Background = new SolidColorBrush(Colors.Green);
Content.UpdateLayout();
return null;
testCondition = treeViewList.Background is SolidColorBrush brush2 && brush2.Color == Colors.Green;
Verify.IsTrue(testCondition, "The TreeView background UI should have matched the specified test color.");
});
}

private bool IsMultiSelectCheckBoxChecked(TreeView tree, TreeViewNode node)
{
var treeViewItem = tree.ContainerFromNode(node) as TreeViewItem;
var checkBox = VisualTreeUtils.FindVisualChildByName(treeViewItem, "MultiSelectCheckBox") as CheckBox;
return checkBox.IsChecked == true;
}

public ObservableCollection<TreeViewItemSource> CreateTreeViewItemsSource()
Expand Down
1 change: 1 addition & 0 deletions dev/TreeView/TreeView.xaml
Expand Up @@ -36,6 +36,7 @@
<ControlTemplate TargetType="local:TreeView">
<local:TreeViewList
x:Name="ListControl"
Background="{TemplateBinding Background}"
ItemTemplate="{TemplateBinding ItemTemplate}"
ItemTemplateSelector="{TemplateBinding ItemTemplateSelector}"
ItemContainerStyle="{TemplateBinding ItemContainerStyle}"
Expand Down

0 comments on commit e51202a

Please sign in to comment.