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