在我的UWP应用中,我正在使用 CommandBar 的 DynamicOverflowItemsChanging 事件我的用例并不复杂,我试图通过使用此事件来解决另一个问题,请参阅this post的回答。
因此,如上面提供的链接中的答案所示,我正在尝试调用此事件并同步MoreButton
的可见性现在问题是当命令栏的辅助溢出菜单没有&删除或添加了该项目,因此它们仍会显示事件被触发前的项目,但是当此事件完成后,项目的转移也会完成。
所以简而言之,我想以某种方式提出另一个事件,或者在 DynamicOverflowItemsChanging 完成执行时得到通知,这样我就可以拥有正确的数据并正确设置更多按钮的可见性。或者换句话说,我想实现 DynamicOverflowItemsChanged 事件的行为,遗憾的是,该事件并不存在于api中,所以我正在寻找另一种方法。
我知道我可以在最后(在DynamicOverflowItemsChanging
事件结束之前)调用另一个事件,但是这样我仍然没有获得正确的值,正确的值只有在此事件时才可用完成它的执行。就像我们可以使用Task.Then()
一样,所以当一个任务完成时,另一个任务可以自动启动,所以我想要这样的东西。任何建议将不胜感激。
protected override void OnApplyTemplate()
{
var barr = (CommandBar)GetTemplateChild("MediaControlsCommandBar");
//the event to control the dynamicoverflow automatically.
barr.DynamicOverflowItemsChanging += (s, e) =>
{
if (_secondarycontrols.Items.Count == 0 && e.Action == CommandBarDynamicOverflowAction.AddingToOverflow)
_moreButton.Visibility = Visibility.Visible;
else if (_secondarycontrols.Items.Count == 1 && e.Action == CommandBarDynamicOverflowAction.RemovingFromOverflow)
_moreButton.Visibility = Visibility.Collapsed;
};//when this event finishes here I want to get notified.
//base implementation
base.OnApplyTemplate();
}
答案 0 :(得分:1)
温暖的问候,微软学生合作伙伴:-)。
快速而肮脏的黑客攻击是在处理程序的末尾添加Task.Delay
并希望项目在延迟结束之前已经改变。这当然非常丑陋且容易出错。我建议采用不同的解决方案。
您已经可以访问_secondarycontrols
CommandBarOverflowPresenter
。这非常有用,因为Items
属性具有VectorChanged
事件,只要添加,删除或更改项目,就会触发该事件。这意味着,您实际上可以使用此事件并在其中移动逻辑,而不是使用DynamicOverflowItemsChanging
事件。然后,您可以直接检查准确的项目数。