2017-01-17 9 views
0

<DataTemplate><TextBox>を含むResourceDictionaryがあります。問題は、TextBoxContextMenuOpeningイベントをバインディングを使用して接続する方法です。私はContextMenuOpeningイベントにバインディングと一致する名前を持つDependencyProperty.Register経由したDependencyPropertyを作成しようとしたが、実行時にエラーがある:ResourceDictionary内のDataTemplateでContextMenuOpeningにバインドするXAML

A 'Binding' cannot be set on the 'AddContextMenuOpeningHandler' property of type 'TextBox'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.

のResourceDictionary XAML:

<DataTemplate> 
    <Grid> 
     <TextBox ContextMenuOpening="{Binding ??WHAT GOES HERE?? }" /> 
    </Grid>  
</DataTemplate> 

は私が「とは何ですかXAMLがUserControlのXAMLではなくResourceDictionaryに存在するために可能なことをしようとしていますか?

+0

あなたは本当にやろうとしていますか?イベントをプロパティにバインドすることはできません...コンテキストメニューが開いたときに何をしたいですか? – mm8

+0

@ mm8メニューをカスタマイズするハンドラーを追加したい – edtheprogrammerguy

+0

イベントハンドラーは、ビューのコードビハインドでプログラムで定義されています。 – mm8

答えて

1

XAMLがUserControlのXAMLではなくResourceDictionaryになっているため、私ができることは何ですか?

ここで説明するようにはい、あなたはResourceDictionaryのにコードビハインドファイルを追加することができます。

Is it possible to set code behind a resource dictionary in WPF for event handling?

を使用すると、コードビハインドあなたはいつものようにイベントを処理することができ、ファイルを追加したら:

を何EX
<TextBox ContextMenuOpening="TextBox_ContextMenuOpening" /> 

private void TextBox_ContextMenuOpening(object sender, ContextMenuEventArgs e) 
{ 
    //do your thing... 
} 
+1

私はあなたの答えを感謝し、それは私がしようとしていたものではありませんが、それは仕事を完了するのに十分近いです。私の問題は、バインドされたオブジェクトに戻る方法ですが、 'OnScalingMenuOpening'コールバックのオブジェクトが、バインドされたオブジェクトを参照する' DataContext'を持つことを発見しました。 ResourceDictionaryはバインドされたオブジェクトの種類について知らないバインドされたオブジェクトとは別のアセンブリに存在するため、そのオブジェクトを動的に呼び出すことができます。少し醜いですが、それは動作します!助けてくれてありがとう。答えを受け入れて投票します。 – edtheprogrammerguy

関連する問題