首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过委托切换PanoramaItem可见性

通过委托切换PanoramaItem可见性
EN

Stack Overflow用户
提问于 2011-09-17 12:51:54
回答 4查看 1K关注 0票数 1

我在Windows Phone开发中遇到了一个特殊的问题。我有4个全景项目,每个项目都包含一个webBrowser控件。在应用程序开始时,我只有第一个全景项目可见,而剩余的项目处于折叠状态。

基于第一个事件中的交互,我们通知WP7应用程序(webBrowser.ScriptNotify事件)并决定显示哪些全景项目。可见性在处理ScriptNotify事件的委托中设置。

我面临的问题是,虽然我将代理中的可见性设置为可见,但它不会显示在全景图中。我试过在委托中使用Dispatcher来改变可见性,但是没有帮助:

代码语言:javascript
复制
Deployment.Current.Dispatcher.BeginInvoke(() => { 
    discussions.Visibility = System.Windows.Visibility.Visible; 
});

有没有人能建议我可能做错了什么?

EN

回答 4

Stack Overflow用户

发布于 2011-09-17 18:45:04

首先,您不应该在全景图中使用WebBrowser控件。这是非常糟糕的表现。

其次,全景图和PivotItems没有折叠状态。

第三,dispatcher与此无关(除非您没有在UI线程上运行代码)。

因此,您需要做的是将PanoramaItems动态添加到全景控件中。这可以通过数据绑定(推荐)完成,也可以直接从C#完成。

票数 0
EN

Stack Overflow用户

发布于 2011-09-20 17:11:59

我不知道性能如何,但我确信PanoramaItem有一个折叠的*可见性*状态,我试着从代码中切换它,如果初始状态是可见的,它就像一个魔咒。

但是如果加载全景图时初始状态是折叠的,那么它就不再起作用了。我猜这是因为如果它是折叠的,那么它就不会包含在全景中,所以当你将它设置为可见时,它将不可见。

也许这是个bug,或者我不知道,但这有点尴尬。

可以将PanoramaItem添加到全景图中。

票数 0
EN

Stack Overflow用户

发布于 2012-01-12 01:49:51

我很抱歉没有回答这个问题,但反过来,强制执行问题:)。

我确实遇到了同样的问题,一个带有ItemsControl数据库的PanoramaItem绑定到了ViewModel的一个集合。绑定可见性属性被数据绑定到{ PanoramaItem },并且使用了CollectionToVisibility转换器。在调试过程中,在转换器代码中设置了断点,我设法看到返回值是正确的,但是当集合包含项时,PanoramaItem是不可见的。

我的调查使我意识到,实际上,当第一次获取集合时,返回值为null,因为集合数据来自对服务的异步调用,并且转换器返回值为Visibility.Collapsed,只有当集合被填充并引发PropertyChanged事件时,第二次获取集合属性才会触发数据库绑定刷新,并且转换器的返回值现在为Visibility.Visible,这使我认为在应用模板期间PanoramaItem不包括在全景控件树中,因为可见性被设置为折叠,之后UI再也不会加载PanoramaItem。

我做了一个测试来验证这个场景,在集合属性的get中返回一个硬编码的项目列表,以便第一个get中包含项目,而转换器在第一个get中返回Visible,就像一个request.Everything一样工作。我甚至可以将集合中的项目串出来,然后它就会折叠起来,反之亦然。

所有这些都是纯Xaml,没有代码隐藏。这样做的目的是隐藏由于某种原因而没有内容可显示的PanoramaItems。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7452526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档