我想在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')
答案 0 :(得分:0)
您的问题是上下文菜单不在主视觉树中,因此ElementName
无法正常工作。上下文菜单本身就是一个小的,无父的,无实体的视觉树。
您对可视树的链接是PlacementTarget
的{{1}}属性。弹出菜单时,ContextMenu
将成为拥有上下文菜单的控件。在这种情况下,那是PlacementTarget
。方便的是,这就是你想要的那个。
因此,使用view:FileExplorerControl
获取RelativeSource
,然后使用其ContextMenu
属性获取PlacementTarget
。
FileExplorerControl