Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# DatePicker匿名事件处理程序_C#_Wpf - Fatal编程技术网

C# DatePicker匿名事件处理程序

C# DatePicker匿名事件处理程序,c#,wpf,C#,Wpf,我有一个WPF表单,是我通过编程创建的。它基本上是一个项目列表,包含2个指定日期范围的DatePicker对象。我的大部分工作都正常,但我需要在SelectedDateChanged事件上触发一些逻辑 问题是,由于日期选择器是根据以前表单中的选择动态生成的,因此我需要使用匿名侦听器(或在.NET中调用它们的任何内容)。我一直无法以我所知道的方式去做,而且我似乎也无法通过谷歌找到任何例子或帮助。提前谢谢你的提示 生成日期选择器: public SystemInterval(Role role)

我有一个WPF表单,是我通过编程创建的。它基本上是一个项目列表,包含2个指定日期范围的
DatePicker
对象。我的大部分工作都正常,但我需要在
SelectedDateChanged
事件上触发一些逻辑

问题是,由于
日期选择器是根据以前表单中的选择动态生成的,因此我需要使用匿名侦听器(或在.NET中调用它们的任何内容)。我一直无法以我所知道的方式去做,而且我似乎也无法通过谷歌找到任何例子或帮助。提前谢谢你的提示

生成日期选择器:

public SystemInterval(Role role)
    {
        this.role = role;
        InitializeComponent();
        lbls = new Label[role.RoleSystems.Length];
        dp = new DatePicker[role.RoleSystems.Length * 2];
        cks = new CheckBox[role.RoleSystems.Length];
        ScrollViewer sv = new ScrollViewer();
        sv.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
        sv.VerticalAlignment = System.Windows.VerticalAlignment.Top;
        sv.Margin = new Thickness(0,50,0,40);
        Grid g = new Grid();
        g.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
        g.VerticalAlignment = System.Windows.VerticalAlignment.Top;
        ColumnDefinition col1 = new ColumnDefinition();
        col1.Width = new GridLength(46);
        ColumnDefinition col2 = new ColumnDefinition();
        col2.Width = GridLength.Auto;
        ColumnDefinition col3 = new ColumnDefinition();
        col3.Width = new GridLength(150);
        ColumnDefinition col4 = new ColumnDefinition();
        col4.Width = new GridLength(150);
        g.ColumnDefinitions.Add(col1);
        g.ColumnDefinitions.Add(col2);
        g.ColumnDefinitions.Add(col3);
        g.ColumnDefinitions.Add(col4);
        sv.Content = g;
        LayoutRoot.Children.Add(sv);

        for (int r = 0; r < cks.Length; r++)
        {
            g.RowDefinitions.Add(new RowDefinition());
        }

        g.Height = (lbls.Length * 25) + (lbls.Length * 5);

        for (int i = 0, j = 0; i < cks.Length; i++, j+=2)
        {
            cks[i] = new CheckBox();
            cks[i].IsChecked = false;
            cks[i].VerticalAlignment = System.Windows.VerticalAlignment.Center;
            cks[i].HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
            Grid.SetColumn(cks[i], 0);
            Grid.SetRow(cks[i], i);
            g.Children.Add(cks[i]);

            lbls[i] = new Label();
            lbls[i].Height = 25;
            lbls[i].Content = role.RoleSystems[i].SystemName;
            lbls[i].VerticalAlignment = System.Windows.VerticalAlignment.Center;
            lbls[i].HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
            Grid.SetColumn(lbls[i], 1);
            Grid.SetRow(lbls[i], i);
            g.Children.Add(lbls[i]);

            dp[j] = new DatePicker();
            dp[j].Height = 25;
            dp[j].Width = 115;
            dp[j].VerticalAlignment = System.Windows.VerticalAlignment.Center;
            dp[j].HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
            dp[j].IsEnabled = false;
            dp[j].BlackoutDates.Add(new CalendarDateRange(new DateTime(0001, 1, 1), DateTime.Now.Subtract(TimeSpan.FromDays(1))));
            Grid.SetColumn(dp[j], 2);
            Grid.SetRow(dp[j], i);
            g.Children.Add(dp[j]);

            dp[j + 1] = new DatePicker();
            dp[j + 1].Height = 25;
            dp[j + 1].Width = 115;
            dp[j + 1].VerticalAlignment = System.Windows.VerticalAlignment.Center;
            dp[j + 1].HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
            dp[j + 1].IsEnabled = false;
            dp[j + 1].BlackoutDates.Add(new CalendarDateRange(new DateTime(0001, 1, 1), DateTime.Now));
            Grid.SetColumn(dp[j + 1], 3);
            Grid.SetRow(dp[j + 1], i);
            g.Children.Add(dp[j + 1]);

            cks[i].Click += new RoutedEventHandler(delegate(object s, RoutedEventArgs re)
            {
                CheckBox cb = (CheckBox)re.Source;
                for (int r = 0; r < cks.Length; r++)
                {
                    if (cks[r].Equals(cb))
                    {
                        dp[r * 2].IsEnabled = true;
                        dp[r * 2 + 1].IsEnabled = true;
                    }
                }
            });
        }
公共系统间隔(角色)
{
this.role=角色;
初始化组件();
lbls=新标签[role.RoleSystems.Length];
dp=新的日期选择器[role.RoleSystems.Length*2];
cks=新复选框[role.RoleSystems.Length];
ScrollViewer sv=新的ScrollViewer();
sv.HorizontalAlignment=System.Windows.HorizontalAlignment.Stretch;
sv.VerticalAlignment=System.Windows.VerticalAlignment.Top;
sv.余量=新厚度(0,50,0,40);
网格g=新网格();
g、 HorizontalAlignment=System.Windows.HorizontalAlignment.Left;
g、 垂直对齐=System.Windows.VerticalAlignment.Top;
ColumnDefinition col1=新ColumnDefinition();
col1.宽度=新网格长度(46);
ColumnDefinition col2=新ColumnDefinition();
col2.Width=GridLength.Auto;
ColumnDefinition col3=新ColumnDefinition();
col3.宽度=新网格长度(150);
ColumnDefinition col4=新ColumnDefinition();
col4.宽度=新网格长度(150);
g、 ColumnDefinitions.Add(col1);
g、 ColumnDefinitions.Add(col2);
g、 ColumnDefinitions.Add(col3);
g、 ColumnDefinitions.Add(col4);
sv.含量=g;
LayoutRoot.Children.Add(sv);
对于(int r=0;r

复选框有一个匿名事件处理程序,但是这不适用于
日期选择器。SelectedDateChanged
事件。

您是指使用这样的匿名方法的事件处理程序吗

var dp = new DatePicker();
dp.SelectedDateChanged +=
    (sender, args) =>
        {
            var picker = (DatePicker) sender;
            /* do stuff here */
        };

你是说使用匿名方法的事件处理程序吗

var dp = new DatePicker();
dp.SelectedDateChanged +=
    (sender, args) =>
        {
            var picker = (DatePicker) sender;
            /* do stuff here */
        };

不确定WPF事件,但在Winforms中,以编程方式创建的项不需要匿名方法。这是“对象发送者”的优点参数,您不需要本地引用。我知道如何在WPF中创建anon方法,我要说的是,它不适用于DatePicker。必须有其他方法来实现它。@MattGrogan您是用C代码生成DatePicker,还是由XAML模板生成的?@MattGrogan请提供一个示例。不确定WPF事件,b在Winforms中,对于通过编程创建的项,您不需要匿名方法。这就是“对象发送者”的优点参数,您不需要本地引用。我知道如何在WPF中创建anon方法,我要说的是,它不适用于DatePicker。必须有其他方法来实现它。@MattGrogan您是用C代码生成DatePicker,还是由XAML模板生成的?@MattGrogan请提供一个示例。这正是我需要的。非常感谢。我永远也找不到这种语法。微软有时因为缺乏有意义的文档而让我生气。是的,它可能很差。搜索“anony”