Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用UpdateLayout()[UWP]刷新日历视图_C#_Xaml_Uwp_Uwp Xaml_Calendarview - Fatal编程技术网

C# 无法使用UpdateLayout()[UWP]刷新日历视图

C# 无法使用UpdateLayout()[UWP]刷新日历视图,c#,xaml,uwp,uwp-xaml,calendarview,C#,Xaml,Uwp,Uwp Xaml,Calendarview,在我的UWP应用程序中,我试图刷新calendarview上的密度条,如果用户单击按钮,问题是,尽管calendarview.UpdateLayout()应重新运行CalendarViewDayItemChangeing事件,它仅在第一次加载CalendarView时运行。我做错什么了吗 public MainPage() { this.InitializeComponent(); densityColors.Add(Colors

在我的UWP应用程序中,我试图刷新
calendarview
上的密度条,如果用户单击按钮,问题是,尽管
calendarview.UpdateLayout()
应重新运行
CalendarViewDayItemChangeing
事件,它仅在第一次加载
CalendarView
时运行。我做错什么了吗

 public MainPage()
        {
            this.InitializeComponent();
            densityColors.Add(Colors.Green); 
        }

      private void CalendarView_CalendarViewDayItemChanging(CalendarView sender, CalendarViewDayItemChangingEventArgs args)
            {
                item = args.Item;
                if (item < DateTimeOffset.Now)
                {
                    item.SetDensityColors(densityColors);
                }

            }

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                densityColors[0]=Colors.Blue;
                calendarView.UpdateLayout();
            }
public主页()
{
this.InitializeComponent();
密度颜色。添加(颜色。绿色);
}
private void CalendarView\u CalendarViewDayItemChangeing(CalendarView发件人、CalendarViewDayItemChangingEventArgs参数)
{
项目=参数项目;
如果(项
UpdateLayout
在这里不会执行任何操作,因为没有布局更新,并且只有当您移动到另一个日历视图时才会触发
CalendarViewDayItemChangeing

 public MainPage()
        {
            this.InitializeComponent();
            densityColors.Add(Colors.Green); 
        }

      private void CalendarView_CalendarViewDayItemChanging(CalendarView sender, CalendarViewDayItemChangingEventArgs args)
            {
                item = args.Item;
                if (item < DateTimeOffset.Now)
                {
                    item.SetDensityColors(densityColors);
                }

            }

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                densityColors[0]=Colors.Blue;
                calendarView.UpdateLayout();
            }
在您的情况下,只需手动定位所有
CalendarViewDayItems
,并在现有视图上更新其颜色

 public MainPage()
        {
            this.InitializeComponent();
            densityColors.Add(Colors.Green); 
        }

      private void CalendarView_CalendarViewDayItemChanging(CalendarView sender, CalendarViewDayItemChangingEventArgs args)
            {
                item = args.Item;
                if (item < DateTimeOffset.Now)
                {
                    item.SetDensityColors(densityColors);
                }

            }

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                densityColors[0]=Colors.Blue;
                calendarView.UpdateLayout();
            }
首先,创建一个小的
Children
扩展方法来帮助检索相同类型的所有子项

 public MainPage()
        {
            this.InitializeComponent();
            densityColors.Add(Colors.Green); 
        }

      private void CalendarView_CalendarViewDayItemChanging(CalendarView sender, CalendarViewDayItemChangingEventArgs args)
            {
                item = args.Item;
                if (item < DateTimeOffset.Now)
                {
                    item.SetDensityColors(densityColors);
                }

            }

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                densityColors[0]=Colors.Blue;
                calendarView.UpdateLayout();
            }
public static class Helper
{
    public static List<FrameworkElement> Children(this DependencyObject parent)
    {
        var list = new List<FrameworkElement>();

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);

            if (child is FrameworkElement)
            {
                list.Add(child as FrameworkElement);
            }

            list.AddRange(Children(child));
        }

        return list;
    }
}
注意:您不必担心新的
CalendarViewDayItem
进入视图,因为它们将由您的
CalendarView\u CalendarViewDayItemChangeing
回调处理

 public MainPage()
        {
            this.InitializeComponent();
            densityColors.Add(Colors.Green); 
        }

      private void CalendarView_CalendarViewDayItemChanging(CalendarView sender, CalendarViewDayItemChangingEventArgs args)
            {
                item = args.Item;
                if (item < DateTimeOffset.Now)
                {
                    item.SetDensityColors(densityColors);
                }

            }

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                densityColors[0]=Colors.Blue;
                calendarView.UpdateLayout();
            }