gpt4 book ai didi

c# - 无法将可检查的 MenuItem 绑定(bind)到父窗口的 Topmost(始终在顶部)属性

转载 作者:行者123 更新时间:2023-11-30 22:29:45 25 4
gpt4 key购买 nike

我不知道我哪里错了。希望你们中的一个能提供帮助。

我有一个包含 TabControl 的窗口。 TabControl 有一个 ContextMenu,其中包含一个用于“始终在最前面”行为的可检查项目。我想将此可检查项绑定(bind)到包含窗口的 bool 值 Topmost 属性。

无论我做什么,绑定(bind)都会失败,并且在我的调试输出中出现“找不到绑定(bind)源”错误。

(这些摘录大大简化了我的实际代码。我希望我没有不小心删掉任何相关内容。)

首先我尝试了这个:

<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 绑定(bind)吗?

所以我尝试了这个:

<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>
...

那也没用。

所以现在我卡住了。如何使此绑定(bind)工作?

注意:我的代码隐藏没有对这些元素做任何事情。我需要设置 Window.DataContext 还是什么?这可能会破坏此窗口的其他部分。

最佳答案

是的,无论您的“TopMost”属性位于什么对象上,都必须将其设置为窗口的 DataContext。如果将其设置为 Window 的 DataContext,那么您的控件应该能够从您在第一个示例中尝试的 ElementName 绑定(bind)中获取属性。

您的 View 将查看其 DataContext 中名为“TopMost”的属性

关于c# - 无法将可检查的 MenuItem 绑定(bind)到父窗口的 Topmost(始终在顶部)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10036497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com