2009-07-13 6 views
2

ここでは用語が間違っているかもしれませんが、添付イベントを作成しようとしています。WPFのカスタム添付イベント

<Grid Background="{StaticResource WindowBackground}" x:Name="Foo" s:SurfaceFrameworkElement.ContactChanged="Foo_ContactChanged"/> 

私はハンドラが同じようにXAMLで追加することができたためにカスタムイベントを作成したいが、私はトラブルを抱えている:表面SDKでは

、あなたのようなことを行うことができます。

カスタムルーティングイベントを作成できますが、XAMLインテリセンスには表示されず、イベントハンドラは定期的に入力するだけで追加されません。ここに私のイベントの定義があります:

public static class TagRectEvents 
{ 
    public static readonly RoutedEvent TagRectEnterEvent = EventManager.RegisterRoutedEvent(
     "TagRectEnter", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TagRectEvents)); 

    public static void AddTagRectEnterHandler(DependencyObject d, RoutedEventHandler handler) 
    { 
     UIElement element = d as UIElement; 
     if (element == null) 
     { 
      return; 
     } 
     element.AddHandler(TagRectEvents.TagRectEnterEvent, handler); 
    } 

    public static void RemoveTagRectEnterHandler(DependencyObject d, RoutedEventHandler handler) 
    { 
     UIElement element = d as UIElement; 
     if (element == null) 
     { 
      return; 
     } 
     element.RemoveHandler(TagRectEvents.TagRectEnterEvent, handler); 
    } 
} 

私はちょうどそれについてすべて間違っていますか?添付のプロパティを追加し、そのプロパティを設定する要素を使用して作業を行う方法については、「添付のビヘイビア」の例のすべてを参照してください。

答えて

0

添付イベントがIntellisenseに表示されるようにするには、サテライトアセンブリまたは.dllライブラリに存在するクラスに属している必要があります。ライブラリを追加する最も簡単な方法は、 "WPFカスタムコントロールライブラリ"プロジェクトをソリューションに追加することです。 Wpfコントロールライブラリを使用すると、すべての標準参照が自動的に追加されます(C#クラスライブラリでは表示されません)。テーマ/一般の関連スタイルを削除するだけで、CustomControl1.csを削除できます。 xaml。

0

名前空間をマッピングしていないか、またはlocal:TagRectEvents.TagRectEnterEventのようなイベントを添付している必要があります。 TagRectEnterEventではなく、TagRectEnterを使用する必要があります。

名前空間マッピング:

xmlns:local="clr-namespace:WpfInfrastructure.WpfAttachedEvents" 

使用法:

<Button Content="Press" local:TagRectEvents.TagRectEnter="MyHandler" Margin="25,43,36,161" /> 

ハンドラー:私はあなたのコードを使用

public void MyHandler(object sender, RoutedEventArgs e) 
    { 
     System.Diagnostics.Debug.WriteLine("Hurray!"); 
    } 

、それは正しくここに動作します。

関連する問題