【发布时间】:2015-12-20 17:03:09
【问题描述】:
一段时间以来,我一直在尝试以自己的方式实现微软的汉堡包模式。
最终结果如下:
- AppShell 用于包含当前页面和汉堡菜单(菜单始终可见)
- 在 Appshell 中,网格有两行:一列高度为 48 像素,一列高度为一开始。
- 在第一行中,添加了命令栏(全局)和汉堡按钮(具有自定义样式的切换按钮,宽高 48 像素,汉堡字体图标位于中心)
- 在第二行,SplitView 在窗格上有一个 ListBox,在内容中有一个框架。
这样可以控制内容,同时显示全局菜单和命令栏。在 Frame 的 Navigated 事件中,我更新 CommandBar 以从 Frame 的 Content 属性(我使用具有这些属性的自定义页面控件)和 CommandBar 的内容(现在是带绑定的单个 TextBlock)。
但是,我想将 ToggleButton 移到 CommandBar 中。它工作得很好,除了绑定(ToggleButton 的 IsChecked 绑定到 SplitView 的 IsPaneOpen)不起作用。我使用常规的 ElementName 定位,并且不希望使用 ViewModel 属性。
CommandBar.Content 是否使用不同的上下文?或者为什么 ElementName 参考不起作用?
【问题讨论】:
-
你使用
x:Bind吗?您是否正确设置了Mode属性? -
我使用普通的
Binding,而不是x:Bind。模式设置正确(TwoWay),但就像属性更改永远不会触发一样。如果我从 CommandBar 中复制粘贴 ToggleButton 的确切代码,它可以正常工作。如果在命令栏的内容内,它将停止工作。 -
您是否尝试过反转绑定?我的意思是:不要在 ToggleButton 上使用双向绑定,而是使用像
IsPaneOpen="{Binding IsChecked, ElementName=Toggle}"这样的单向绑定 -
是的,我做了,结果相似。这就像CommandBar内容中的控件不存在一样。不过有趣的是 - 我将 TextBlock 的 Text 绑定到 Frame 的 Content 的 Title 属性(我使用自定义的 Page 控件),这样就可以了。
标签: c# uwp hamburger-menu commandbar