5

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

Surface SDK では、次のようなことができます。

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

同様にXAMLでハンドラーを追加できるカスタムイベントを作成したいのですが、うまくいきません。

カスタム ルーティング イベントを作成できますが、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 );
    }
}

私はそれについてすべて間違っていますか?私が目にするすべての「添付動作」の例は、添付プロパティを追加し、そのプロパティを設定する要素を操作することに関するものです。

4

2 に答える 2

2

名前空間をマッピングしていない、および/または のようなイベントを添付している必要がありますlocal:TagRectEvents.TagRectEnterEventTagRectEnterではなく、を使用する必要があり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!");
    }

私はあなたのコードを使用しましたが、ここでは正しく動作します。

于 2016-02-26T05:51:12.670 に答える
-1

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

于 2010-08-10T20:43:16.947 に答える