C # - обработка событий WPF usercontrol в winforms - PullRequest
1 голос
/ 08 августа 2011

Я размещаю пользовательский контроль WPF в winform.Я использую WPF control Expander в WPF usercontrol ( UserControl1 ).Когда я разворачиваю или разворачиваю расширитель, моя основная форма должна получать уведомление.Как добиться этого?

Я попытался со следующими параметрами:

  • Объявлен делегат и событие в userconttol1 и попытался подписаться в mainform - не помогает
  • использованное дочернее событие в основной форме

WPF usercontrol name - usercontrol1 Mainform Name - форма 1 размещенная usercontrol в основной форме name - elementHost1

this.elementHost1.ChildChanged += new System.EventHandler<System.Windows.Forms.Integration.ChildChangedEventArgs>(this.elementHost1_ChildChanged);//form1 designer


        private void elementHost1_ChildChanged(object sender, ChildChangedEventArgs e)
        {
            var ctr = (elementHost1.Child as UserControl1);
            if (ctr == null)
                return;
            ctr.isCollapsed+=new UserControl1.expandedDel(ctr_isCollapsed);

        }

    void ctr_isCollapsed(object sender, System.Windows.RoutedEventArgs e)
        {
            throw new NotImplementedException();
        } 

Это решение мне не помогает.

1 Ответ

0 голосов
/ 10 августа 2011

WPF usercontrol Winforms interop - обработка событий WPF в Winforms

Требование: пользовательский контроль WPF (UserControl1) содержит Expander (экспандер1), а экспандер содержит 3 переключателя и WPF usercontrl, размещенный в winform (Form1) когда радиокнопка изменена в главной форме usercontrol, она должна быть уведомлена и на основе выбора должна появиться некоторые элементы управления в mainform

Код: в usercontrol1.xaml.cs

    public delegate void ucRadioButtonHandler(object sender, **ucButtonEventArgs** e);
    public event ucRadioButtonHandler onRadioButtonClick;

    private void radioButton1_Checked(object sender, RoutedEventArgs e)
    {
        if (onRadioButtonClick != null)
        {
            onRadioButtonClick(sender, new ucButtonEventArgs());
        }
    }

ucButtonEventArgs - это класс, определенный в том же usercontrol.xaml.cs

public partial class ucButtonEventArgs : EventArgs
{
    public ucButtonEventArgs()
    {
    }
}

Теперь в форме MainForm1

public Form1()
        {
            InitializeComponent(); 
            userControl11.onRadioButtonClick += new           WpfControlLibrary1.UserControl1.ucRadioButtonHandler(userControl11_onRadioButtonClick);
        }

 void userControl11_onRadioButtonClick(object sender, WpfControlLibrary1.ucButtonEventArgs e)
        {
            System.Windows.Controls.RadioButton rb = (System.Windows.Controls.RadioButton)sender;
            MessageBox.Show(rb.Content + " Selected!!!!!!!!");
        }      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...