Обработчик анонимных событий DatePicker - PullRequest
0 голосов
/ 14 марта 2012

У меня есть форма WPF, которую я создал программно. В основном это список элементов с 2 DatePicker объектами для указания диапазона дат. У меня все работает по большей части, но мне нужно запустить логику для события SelectedDateChanged.

Проблема в том, что DatePicker генерируются динамически на основе выборок из предыдущей формы, мне нужно использовать анонимный слушатель (или как вы их называете в .NET). Я не смог сделать это так, как я знаю, и я не могу найти какой-либо пример или помощь через Google либо. Заранее благодарим за любые советы.

Генерация DatePickers:

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;
                    }
                }
            });
        }

Флажки имеют анонимный обработчик событий, однако это не работает для события DatePicker.SelectedDateChanged.

1 Ответ

3 голосов
/ 14 марта 2012

Вы имеете в виду обработчик событий, использующий анонимный метод, подобный этому?

var dp = new DatePicker();
dp.SelectedDateChanged +=
    (sender, args) =>
        {
            var picker = (DatePicker) sender;
            /* do stuff here */
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...