我在ViewModel中有一个布尔属性,假设它的名称是IsNotSupported
,如果某个传感器不受支持,则用于显示一些警告信息。因此,我使用一个BooleanToVisibilityConverter
,将其添加到资源中:
<phone:PhoneApplicationPage.Resources>
<local:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</phone:PhoneApplicationPage.Resources>
并将其绑定到包含警告的堆栈面板上:
<StackPanel x:Name="NotSupportedWarning" Visibility="{Binding IsNotSupported,
Converter={StaticResource BooleanToVisibilityConverter}}">
那很好地解决了问题,但在加载页面时,如果传感器得到支持,警告只会出现一小部分时间,然后消失。我知道这种闪烁是由于绑定尚未发生而默认为可见所致。
这种闪烁非常恼人... 它应该默认为折叠状态,并在确定需要显示警告后才将其设置为可见。此外,这将避免在绑定之后进行第二个布局处理,因此可能对性能产生积极影响。
我一再遇到这个问题,在互联网上找不到任何相关信息,直到我发现与此密切相关的此 SO问题,但如果搜索Windows手机而不是Silverlight,则无法找到该问题和答案。虽然这个问题和解决方案似乎很简单,但它确实困扰了我很长一段时间,所以我觉得写一个关于它的Q&A-style问题来帮助其他面临同样问题的人是个好主意。