我无法弄清楚我要去哪里错了。希望你们中的一个可以提供帮助。
我有一个包含 TabControl 的窗口。TabControl 有一个 ContextMenu,其中包含一个用于“始终在顶部”行为的可检查项。我想将此可检查项绑定到包含窗口的布尔 Topmost 属性。
无论我做什么,绑定都会失败,并且在调试输出中出现“找不到绑定源”错误。
(这些摘录是从我的实际代码中大大简化的。我希望我没有不小心删掉任何相关的内容。)
首先我尝试了这个:
<Window x:Name="myWindow" (blah blah other properties)>
<TabControl x:Name="tabControl">
<TabControl.ContextMenu>
<ContextMenu>
<MenuItem Header="Always on Top" IsCheckable="True"
IsChecked="{Binding ElementName=myWindow,
Path=Topmost,
Mode=TwoWay}"/>
</ContextMenu>
...
那没有用。是因为 MenuItem 在窗口“myWindow”内吗?我需要使用 RelativeSource Ancestor 绑定吗?
所以我尝试了这个:
<Window x:Name="myWindow" (blah blah other properties)>
<TabControl x:Name="tabControl">
<TabControl.ContextMenu>
<ContextMenu>
<MenuItem Header="Always on Top" IsCheckable="True"
IsChecked="{Binding RelativeSource={
RelativeSource FindAncestor,
AncestorType={x:Type Window}
},
Path=Topmost,
Mode=TwoWay}"/>
</ContextMenu>
...
那也没有用。
所以现在我被困住了。如何使此绑定起作用?
注意:我的代码隐藏没有对这些元素做任何事情。我需要设置 Window.DataContext 还是什么?这可能会破坏此窗口的其他部分。