Silverlight 默认情况下,在控件的可见性属性绑定并在加载后设置上下文时隐藏控件

Silverlight 默认情况下,在控件的可见性属性绑定并在加载后设置上下文时隐藏控件,silverlight,windows-phone-7,Silverlight,Windows Phone 7,我有一个矩形,其可见性属性绑定到视图模型。出于(明显的)性能原因,我正在页面的Loaded事件中设置DataContext。默认情况下,此矩形应收拢。不幸的是,使用这种“后期上下文”模式,矩形显示的时间只有几秒钟 是否有一种无代码的方法使其默认折叠 如果没有,我可以简单地将属性设置为Collapsed,并将其绑定到加载的事件中,但我的应用程序中有许多这样的矩形 我可以实现一个在加载之前折叠的ContentControl?第二个想法太牵强了吗?我做了一个AppearingControl谁的实现不愿

我有一个矩形,其
可见性
属性绑定到视图模型。出于(明显的)性能原因,我正在页面的
Loaded
事件中设置
DataContext
。默认情况下,此矩形应收拢。不幸的是,使用这种“后期上下文”模式,矩形显示的时间只有几秒钟

是否有一种无代码的方法使其默认折叠

如果没有,我可以简单地将属性设置为
Collapsed
,并将其绑定到加载的事件中,但我的应用程序中有许多这样的矩形


我可以实现一个在加载之前折叠的
ContentControl
?第二个想法太牵强了吗?

我做了一个
AppearingControl
谁的实现不愿意称之为“编码”,因为它太简单了:`

public class AppearingControl : ContentControl
{
  public AppearingControl()
  {
    if( !System.ComponentModel.DesignerProperties.IsInDesignTool )
    {
      this.Visibility = System.Windows.Visibility.Collapsed;
      this.Loaded += new RoutedEventHandler( AppearingControl_Loaded );
    }
  }

  void AppearingControl_Loaded( object sender, RoutedEventArgs e )
  {
    this.Loaded -= new RoutedEventHandler( AppearingControl_Loaded );

    this.ClearValue( AppearingControl.VisibilityProperty );
  }
}
我可以这样使用控件:

<slim:AppearingControl HorizontalContentAlignment="Stretch" 
                       VerticalContentAlignment="Stretch">
    <Rectangle Visibility="{Binding TipRoundingHasError, Converter={StaticResource VisibilityConverter}}">
        <Rectangle.Fill>
            <SolidColorBrush Color="#FFFF4040" Opacity="0.5"/>
        </Rectangle.Fill>
    </Rectangle>
</slim:AppearingControl>

有人能证实我不是发明了轮子,或者更糟的是,用火箭筒杀死了一只苍蝇吗


谢谢。

@Martin-您是否尝试过在绑定中设置回退值

我手头没有VS来检查它,但我认为如果您的设置是这样的(很抱歉出现“错误”,这只是一个草稿:

<rectangle visibility={Binding mydata.somthing.someVisibilityProperty} />

然后,如果在加载时绑定,您的控件可能会以默认的Visibility.Visible值“闪烁”。您的绑定在第一次渲染时失败,因为还没有数据绑定。如果是,则只需设置fallbackvalue:

<rectangle visibility={Binding mydata.somthing.someVisibilityProperty, FallbackValue=Collapsed} />

这将导致绑定在无法从源读取时返回“Visibility.Collapsed”

万一

<Rectangle Visibility="{Binding TipRoundingHasError, Converter={StaticResource VisibilityConverter}}">

您在第二个答案中给出的答案基本上如下所示:

<Rectangle Visibility="{Binding TipRoundingHasError, FallbackValue=DEFAULTVALUE, Converter={StaticResource VisibilityConverter}}">

但我现在不记得是否会在FallbackValue上调用yout Converter。这意味着,我现在不能告诉你,是否应该用DEFAULTVALUE替换“Collapsed”或者更确切地说替换“False”。但我认为你会立即测试并选择正确的


有关回退的更多示例,请查看-有一个很好的自定义绑定类示例(是的,不仅转换器可能是自定义的:)

我认为这是一种有效的方法。这解决了我在开始时元素闪烁的问题。谢谢