在UWP中,我们可以通过FindDescendants〈〉获取孩子。但是在winui中,我们不能这样做。通过使用visualhelpertree,它总是在日历视图的getchildCount()中显示零计数
我只是想知道如何获取calendarview的孩子。我也试过这个,但总是显示零个孩子,
private void FindDescendants1(DependencyObject parent, Type targetType)
{
int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
itemchange.Text = childrenCount.ToString();
for (int i = 0; i < childrenCount; i++)
{
var child =(CalendarViewDayItem) VisualTreeHelper.GetChild(parent, i);
if (child.GetType() == targetType)
{
results.Add(child);
}
FindDescendants1(child, targetType);
}
}
我创建了这个函数来获取子函数,并调用
foreach (DependencyObject displayedDay in results)
{
//displayedDay = (CalendarViewDayItem)displayedDay;
CalendarViewDayItem c = displayedDay as CalendarViewDayItem;
if (_highlightedDates.Contains(c.Date))
{
Console.WriteLine(c.Date.ToString());
//highlight
c.Background = new SolidColorBrush(Colors.Red);
}
itemchange.Text = c.Date.ToString();
}
但是这个没有得到子元素,结果是这里的对象列表,它总是显示零。
1条答案
按热度按时间42fyovps1#
我的第一个猜测是在加载控件之前调用FindDescendants1(),例如在构造函数中。如果
CalendarView
在Page
中,请尝试在Page
的Loaded
事件中调用FindDescendants1()。但是下面的代码中还有另一个问题。
你会得到一个异常,因为你试图将每个
DependencyObject
强制转换为CalendarViewDayItem
,通过移除强制转换,你应该得到CalendarViewItems
,尽管如此,我会将FinDescendants()设置为静态的,只接收结果:并像这样使用它: