繁体   English   中英

WinForms中的Interop WPF,如何处理来自WPF控件的事件

[英]Interop WPF in WinForms, how to handle events from WPF control

我正在使用WinForms应用程序中的某些WPF互操作性。 我有以下设置。

  • WinForms用户控件WFControl
    • WPF用户控件GalleryControl
      • 列表框GalleryItems
        • 列表框ItemTemplate GalleryItem

Winforms托管GalleryControl,该控件具有具有GalleryItem的ItemTemplate的GalleryItems(ListBox)。

现在在WFControl中,我想查看GalleryItems何时触发了SelectionChanged事件。

我目前的尝试试图:

  • 在GalleryControl中处理SelectionChanged事件,并使其引发一个单独的公共事件,我的winforms可以读取该事件,但是由于它不是路由事件,因此我无法处理此类事件。 如果我能弄清楚该如何处理,那将起作用。 适用代码:

     public event ClaimGallery SelectedClaimChanged; public ViewModels.InsuranceClaimViewModel ClaimViewModel { get; set; } public int SelectedClaimID { get { return ((Models.InsuranceClaim) ClaimList.SelectedItem).ID; } } public ClaimGallery() { InitializeComponent(); ClaimViewModel = new ViewModels.InsuranceClaimViewModel(); DataContext = ClaimViewModel; ClaimList.ItemsSource = ClaimViewModel.InsuranceClaims; ClaimList.SelectionChanged += ClaimSelectionChanged; } private void ClaimSelectionChanged(object sender, EventArgs e) { //This is the part that doesn't work ClaimList.RaiseEvent(new RoutedEventArgs(SelectedClaimChanged, this)); } 

我还看到,我可以通过一些控件树浏览WFControl中对实际事件的订阅来找到ListBox,但似乎无法弄清楚如何在互操作控件中执行此操作。

我在当前的项目中也遇到类似的问题,目前正在按照您描述的方式解决。 WPF控件重新引发一个公共(正常)事件,然后由WinForms控件处理。

老实说,我没有得到您要说明的部分,该部分必须先经过布线才能由Winforms处理。

我的winforms可以读取,但是我不能处理这样的事件,因为它不是路由事件

您使用“ + =”来处理这个问题...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM