2016-01-28 74 views
0

我試圖創建自己的ContextMenuOpening事件(事件的ContextMenuOpening的名稱應該是相同FrameworkElement的類),當我試圖觸發在XAML頁面其投擲「無法綁定到目標方法事件,因爲它的簽名或安全透明度不兼容與委託類型「,但它的作品很好,當我在後面的代碼掛鉤事件。如何解決與委託類型的方法綁定問題?

請找到下面的代碼片段重現問題,並提供這方面的建議。

XAML

<local:ContextMenuEvetTest x:Name="menu" ContextMenuOpening="menu_ContextMenuOpening" /> 

代碼隱藏提前

#region Main Class 
/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     //this.menu.ContextMenuOpening += menu_ContextMenuOpening; 
    } 

    void menu_ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e) 
    { 
    } 
} 
#endregion 

#region Base Class 

public class ContextMenuEvet : Control 
{ 
    public ContextMenuEvet() 
    { 

    } 
    public delegate void ContextMenuOpeningEventHandler(object sender, ContextMenuOpeningEventArgs e); 

    public new event ContextMenuOpeningEventHandler ContextMenuOpening; 

    internal void GetContextMenuOpeningEvent(ContextMenuOpeningEventArgs e) 
    { 
     if (ContextMenuOpening != null) 
      ContextMenuOpening(this, e); 
    } 

} 
#endregion 

#region Derived Class 

public class ContextMenuEvetTest : ContextMenuEvet 
{ 
    static ContextMenuEvetTest() 
    { 

    } 
} 
#endregion 

#region EventsArgument 

public class ContextMenuOpeningEventArgs : CancelEventArgs 
{ 

} 
#endregion 

感謝。

Jeyasri中號

+0

嘗試讓一切公開。 – AnjumSKhan

+0

嗨AnjumSKhan,感謝您的快速答覆。我也嘗試過,但它不起作用。 –

回答

0

更改您的活動定義:

public new event ContextMenuEventHandler ContextMenuOpening 
     { 
      add 
      { 
       base.AddHandler(FrameworkElement.ContextMenuOpeningEvent, value); 
      } 
      remove 
      { 
       base.RemoveHandler(FrameworkElement.ContextMenuOpeningEvent, value); 
      } 
     } 

和刪除此,

if (ContextMenuOpening != null) 
      ContextMenuOpening(this, e); 

和使用,

internal void GetContextMenuOpeningEvent(ContextMenuEventArgs e) 
    { 
     base.OnContextMenuOpening(e); 
    } 
+0

感謝您的回覆。 但我的目的是利用「自定義的EventArgs(ContextMenuOpeningEventArgs)從CancelEventArgs類繼承」是不是「RoutedEventArgs」。 對於該場景,事件從CS訪問時獲取觸發器。 menu.ContextMenuOpening + = menu_ContextMenuOpening; 對於相同的情況下,當鉤在XAML頁面相同的事件越來越綁定錯誤。

+0

在其他字: 如果我將ContextMenuOpening事件名稱重命名爲別的東西,我沒有收到任何錯誤。我的假設是事件嘗試訪問FrameworkElement類的ContextMenuEventHandler委託。 警告如果我創建沒有新關鍵字的事件: 'Contextmenu_UI.ContextMenuEvet.ContextMenuOpening'隱藏繼承成員'System.Windows.FrameworkElement.ContextMenuOpening'。如果需要隱藏,請使用新關鍵字。 它是如此奇怪找到解決辦法,請分享你的想法,如果任何。 –

+0

@JeyaSri刪除你的答案,這是沒用的。 – AnjumSKhan