我正在DataGrid控件中创建绑定DataGrid控件的列。对于每个DatePicker控件,我都想附加一个SelectedDateChangedEvent处理程序,但是我很难做到这一点。
考虑WPF的下列代码:
private void dg_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyName == "Event Date")
{
var f = new FrameworkElementFactory(typeof(DatePicker));
...
// I tried this:
//f.AddHandler(DatePicker.SelectedDateChangedEvent, new RoutedEventHandler(aRoutedEventHandler));
// and I tried this:
//f.AddHandler(DatePicker.SelectedDateChangedEvent, new SelectionChangedEventHandler(aSelectionChangedEventHandler));
e.Column = new DataGridTemplateColumn()
{
Header = e.Column.Header,
CellTemplate = new DataTemplate() { VisualTree = f },
};
}
}
private void aRoutedEventHandler(object sender, RoutedEventArgs e) { ... }
private void aSelectionChangedEventHandler(object sender, SelectionChangedEventArgs e) {...}尝试任何一个事件处理程序都会导致“参数异常”:
System.ArgumentException类型的第一次异常发生在PresentationFramework.dll附加信息中:处理程序类型无效。
正确的处理程序是什么?
发布于 2016-03-18 15:52:13
您需要为DatePicker SelectedDateChangedEvent添加处理程序如下所示
f.AddHandler(DatePicker.SelectedDateChangedEvent, new EventHandler<SelectionChangedEventArgs>(aSelectionChangedEventHandler));通过查看声明的公共事件中的DatePicker类,可以找到处理程序类型。
public event RoutedEventHandler CalendarOpened;
public event RoutedEventHandler CalendarOpened;
public event EventHandler<DatePickerDateValidationErrorEventArgs>
public event EventHandler<SelectionChangedEventArgs> SelectedDateChanged;https://stackoverflow.com/questions/31702665
复制相似问题