WPF绑定到其他控制器

时间:2017-11-28 14:55:04

标签: c# wpf binding contextmenu

我想在contextmenu中的UpDown控件和名为“FileExplorerControl”的自定义控件之间创建绑定(但它可以在任何控件上进行模拟......)。当我运行程序打开上下文菜单时,UpDown为空,当我放任何数字时,会发生任何效果。问题出在哪里?/

   <view:FileExplorerControl Grid.Column="0"
                                  Padding="5" 
                                  x:Name="LeftFileExplorer"
                                  DataContext=
                "{Binding   LeftFileExplorerViewModel}">
                <view:FileExplorerControl.ContextMenu>
                    <ContextMenu>
                        <StackPanel>
                            <TextBlock>Font Size</TextBlock>
                            <xctk:IntegerUpDown Value="{Binding 
                                      ElementName=LeftFileExplorer, 
                                Path=FontSize, Mode=TwoWay}"
                                                Minimum="8"
                                                Maximum="32"/>
                        </StackPanel>
                    </ContextMenu>
                </view:FileExplorerControl.ContextMenu>
       </view:FileExplorerControl>

调试窗口中的错误消息:

  

System.Windows.Data错误:4:无法找到引用'ElementName = LeftFileExplorer'的绑定源。 BindingExpression:路径=字号;的DataItem = NULL; target元素是'IntegerUpDown'(Name =''); target属性为'Value'(类型'Nullable`1')

1 个答案:

答案 0 :(得分:0)

您的问题是上下文菜单不在主视觉树中,因此ElementName无法正常工作。上下文菜单本身就是一个小的,无父的,无实体的视觉树。

您对可视树的链接是PlacementTarget的{​​{1}}属性。弹出菜单时,ContextMenu将成为拥有上下文菜单的控件。在这种情况下,那是PlacementTarget。方便的是,这就是你想要的那个。

因此,使用view:FileExplorerControl获取RelativeSource,然后使用其ContextMenu属性获取PlacementTarget

FileExplorerControl