Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
Wpf 将树视图项的详细信息绑定到上下文菜单_Wpf_Xaml_Treeview - Fatal编程技术网

Wpf 将树视图项的详细信息绑定到上下文菜单

Wpf 将树视图项的详细信息绑定到上下文菜单,wpf,xaml,treeview,Wpf,Xaml,Treeview,我有一个上下文菜单,它出现在树视图项的右键单击上。我现在想做的是将关于TreeView项目的一些细节传递到上下文菜单中 我将如何从这里开始: XAML 您需要做的第一件事是将MenuItem.Header属性绑定到设置到ContextMenu.DataContext中的对象: <ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={ RelativeSource Self}}">

我有一个上下文菜单,它出现在树视图项的右键单击上。我现在想做的是将关于TreeView项目的一些细节传递到上下文菜单中

我将如何从这里开始:

XAML


您需要做的第一件事是将
MenuItem.Header
属性绑定到设置到
ContextMenu.DataContext
中的对象:

<ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={
        RelativeSource Self}}">
    <MenuItem Name="dataItem1" Header="{Binding Property1}"></MenuItem>
    <MenuItem Name="dataItem2" Header="{Binding Property2}"></MenuItem>
    <Separator/>
    <MenuItem Name="taskItem" Header="Tasks" Click="TaskItem_OnClick"></MenuItem>
</ContextMenu>

这是什么,我听到你问。查看MSDN上的页面,我们发现:

获取或设置
ui元素
,该元素在打开
上下文菜单时相对于该元素定位

在简单的英语中,这只是指应用了
ContextMenu
的UI元素。现在,
Tag
属性只是一个类型为
object
的自由属性,我们可以将任何内容放入其中。在您的情况下,我们将把
ContextMenu.DataContext
值放在其中,因为我们不能直接设置它,因为
ContextMenu
不是常规UI可视化树的一部分:

现在,您没有显示将
ContextMenu
应用于
TreeViewItem
的代码,但在同一位置,您需要将
标记
属性设置为要设置为
ContextMenu.DataContext
值的对象。因此,我们在这里传递它,并在
上下文菜单中取出它,如代码示例所示

有关更多信息,请查看我对堆栈溢出的回答和这里的问题

private void TreeControl_OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    TreeViewItem treeViewItem = VisualUpwardSearch(e.OriginalSource as DependencyObject);

    if (treeViewItem != null)
    {
        treeViewItem.IsSelected = true;
        treeViewItem.Focus();
        e.Handled = true;
    }
}
<ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={
        RelativeSource Self}}">
    <MenuItem Name="dataItem1" Header="{Binding Property1}"></MenuItem>
    <MenuItem Name="dataItem2" Header="{Binding Property2}"></MenuItem>
    <Separator/>
    <MenuItem Name="taskItem" Header="Tasks" Click="TaskItem_OnClick"></MenuItem>
</ContextMenu>