Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定到ResourceDictionary XAML中DataTemplate中的ContextMenuOpening_C#_Wpf_Xaml - Fatal编程技术网

C# 绑定到ResourceDictionary XAML中DataTemplate中的ContextMenuOpening

C# 绑定到ResourceDictionary XAML中DataTemplate中的ContextMenuOpening,c#,wpf,xaml,C#,Wpf,Xaml,我有一个ResourceDictionary,其中包含一个,其中包含一个。问题是如何使用绑定连接文本框的上下文菜单打开事件。我已尝试通过DependencyProperty.Register创建DependencyProperty,其名称与ContextMenuOpening事件中的绑定匹配,但在运行时错误为: 无法在“TextBox”类型的“AddContextMenuOpenHandler”属性上设置“Binding”。“绑定”只能在DependencyObject的DependencyPr

我有一个ResourceDictionary,其中包含一个
,其中包含一个
。问题是如何使用绑定连接
文本框
上下文菜单打开
事件。我已尝试通过
DependencyProperty.Register
创建DependencyProperty,其名称与
ContextMenuOpening
事件中的绑定匹配,但在运行时错误为:

无法在“TextBox”类型的“AddContextMenuOpenHandler”属性上设置“Binding”。“绑定”只能在DependencyObject的DependencyProperty上设置。

ResourceDictionary XAML:

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

因为XAML在ResourceDictionary中,而不是在UserControl的XAML中,所以我试图做的是可能的吗

因为XAML在ResourceDictionary中,而不是在UserControl的XAML中,所以我试图做的是可能的吗

是的,您可以将代码隐藏文件添加到ResourceDictionary,如下所述:

添加代码隐藏文件后,可以像往常一样处理事件:

<TextBox ContextMenuOpening="TextBox_ContextMenuOpening"  />

你到底想干什么?您不能将事件绑定到属性…当上下文菜单打开时,您想做什么?@mm8我想添加一个处理程序来自定义菜单事件处理程序是在视图的代码隐藏中以编程方式定义的。@mm8,是的,我知道,但这在ResourceDictionary中。也许用这种方式连接处理程序是不可能的,是的。请参考我的答案。我很感激你的回答,虽然这不是我想要做的,但已经足够接近完成工作了。我现在的问题是如何返回绑定对象,但是我发现
OnScalingMenuOpening
回调中的对象有一个
DataContext
引用了绑定对象。我可以动态调用该对象,因为ResourceDictionary与绑定对象位于不同的程序集中,绑定对象不知道绑定对象的类型。有点难看,但它能用!谢谢你的帮助。我将接受并投票赞成这个答案。
private void TextBox_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
    //do your thing...
}