簡體   English   中英

WPF中的自定義附加事件

[英]Custom attached events in WPF

我可能在這里弄錯了術語,但我想我正在嘗試創建一個附加事件。

在Surface SDK中,您可以執行以下操作:

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

我想創建一個自定義事件,可以在XAML中以相同的方式添加處理程序,但我遇到了麻煩。

我可以創建一個自定義路由事件,但XAML intellisense沒有看到它,如果我只是定期輸入它,則不會添加事件處理程序。 這是我的事件定義:

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

我只是錯了嗎? 我看到的所有“附加行為”示例更多的是添加附加屬性,然后使用設置該屬性的元素進行操作。

您必須要么不映射命名空間,要么/或附加事件,如local:TagRectEvents.TagRectEnterEvent 您必須使用TagRectEnter ,而不是TagRectEnterEvent

命名空間映射:

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

我使用了你的代碼,它在這里正常工作。

為了使附加事件顯示在Intellisense中,它必須位於一個駐留在附屬程序集 - 或.dll庫中的類中。 添加庫的最簡單方法是在解決方案中添加“WPF自定義控件庫”項目。 使用Wpf控件庫只能確保自動添加所有典型的引用(它們不會與C#類庫一起添加。)只要刪除主題/通用中的關聯樣式,就可以刪除CustomControl1.cs。 XAML。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM