2009-07-13 10 views
2

Ich bekomme hier vielleicht die Terminologie falsch, aber ich denke, ich versuche, ein angehängtes Ereignis zu erstellen.Angepasste Ereignisse in WPF

Im Bereich Surface SDK können Sie tun Dinge wie:

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

Ich möchte ein benutzerdefiniertes Ereignis erstellen, für die ein Handler kann auf die gleiche Weise in XAML hinzugefügt werden, aber ich habe Probleme.

Ich kann ein benutzerdefiniertes Routingereignis erstellen, aber XAML intellisense erkennt es nicht und der Ereignishandler wird nicht hinzugefügt, wenn ich ihn nur regelmäßig eintippe. Hier ist meine Event-Definition:

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); 
    } 
} 

Bin ich gerade dabei alles falsch? Alle Beispiele "angehängtes Verhalten", die ich sehe, betreffen eher das Hinzufügen einer angefügten Eigenschaft und dann das Ausführen von Elementen mit Elementen, die diese Eigenschaft festlegen.

Antwort

0

Damit das angefügte Ereignis in Intellisense angezeigt wird, muss es sich in einer Klasse befinden, die sich in einer Satellitenassembly - oder DLL-Bibliothek befindet. Der einfachste Weg, eine Bibliothek hinzuzufügen, ist das Hinzufügen eines Projekts "WPF Custom Control Library" zu Ihrer Lösung. Die Verwendung einer Wpf-Steuerbibliothek stellt lediglich sicher, dass alle typischen Referenzen automatisch hinzugefügt werden (was nicht mit einer C# -Klassenbibliothek möglich ist). Sie können CustomControl1.cs nur so lange löschen, wie Sie den zugehörigen Stil in Designs/Generic löschen. Xaml.

0

Sie müssen den Namespace nicht zuordnen und/oder Ereignisse wie local:TagRectEvents.TagRectEnterEvent anhängen. Sie müssen TagRectEnter und nicht TagRectEnterEvent verwenden.

Namespace-Zuordnung:

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

Verbrauch:

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

Handler:

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

ich Ihren Code verwendet, ist es hier richtig funktioniert.

Verwandte Themen