Как перенаправить события из пользовательского элемента управления WPF в WinForm? - PullRequest
1 голос
/ 02 мая 2011

У меня есть winform с пользовательским контролем wpf (ElementHost1). Пользовательский контроль содержит только кнопку. Как я могу узнать, когда кнопка wpf была нажата в моей winform? Как я могу «перенаправить» события из wpf usercontrol в winform?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 02 мая 2011

Эта ссылка может быть полезна для вас.

Или простая обработка событий в VB.NET

Public Event ClickMe()

Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
    RaiseEvent ClickMe()
End Sub

Тогда в вашемФактическое окно может иметь следующее:

Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    AddHandler SampleClick1.ClickMe, AddressOf Sample_Click
End Sub

Private Sub Sample_Click()
    MessageBox.Show("This is a proof!")
End Sub

Эта переменная SampleClick1 взята из сгенерированного кода конструктора, доступного для формы для вашего использования.

Friend WithEvents ElementHost1 As System.Windows.Forms.Integration.ElementHost
Friend SampleClick1 As WindowsApplication1.SampleClick
1 голос
/ 10 августа 2011

Вот единственное решение, которое я нашел

в UserControl1.Xaml.cs

public static RoutedEvent ChkBoxChecked = EventManager.RegisterRoutedEvent("CbChecked", RoutingStrategy.Bubble,
                                                                typeof(RoutedEventHandler), typeof(CheckBox));
public event RoutedEventHandler CbChecked
{
    add
    {
        AddHandler(ChkBoxChecked, value);
    }
    remove
    {
        RemoveHandler(ChkBoxChecked, value);
    }
}

private void cbTreeView_Checked(object sender, RoutedEventArgs e)
{
    RoutedEventArgs args = new RoutedEventArgs(ChkBoxChecked);
    RaiseEvent(args);                
}

Теперь в показанном событии MainForm Form1 мы можем добавить событие CbChecked

private void Form1_Shown(object sender, EventArgs e)
{
    this.elemetHost1.CbChecked += new System.Windows.RoutedEventHandler(wpfusercontrol_CbChecked);
    //elementHost1 is the name of wpf usercontrol hosted in Winform
}

void elementHost1_CbChecked(object sender, System.Windows.RoutedEventArgs e)
{
    //This event will raise when user clicks on chekbox
}

Я столкнулся с проблемой здесь. Я использую одно и то же событие в Form1 для всех событий кликов флажков в UserControl1.so Я хочу знать, какой флажок был нажат в mainform.i пытался увидеть в RoutedEventArgs e. ... но не помогает как узнать, какой флажок выбран в основной форме

...