2013-02-05 31 views
0

在我的窗口上,我有一个ViewBox控件,它包含一个自定义的进度条。我将其可见性设置为在设计模式下折叠,因为我需要在特定时刻(登录到应用程序时)显示它。从代码中设置的ViewBox的可见性

在我的进度条,它是usercontrol,我有VisibilityChanged事件的事件处理程序,我停止并开始我的动画。

当用户点击登录按钮时,我需要显示此ViewBox直到登录完成并在成功后再次折叠。但是,当我(在代码后面)设置ViewBox.Visibility = Visible时,它不显示。

有人可以告诉我为什么,或者如何解决它?

XAML:

<Viewbox x:Name="cpProgress" Width="50" Height="50" HorizontalAlignment="Center" VerticalAlignment="Bottom" Grid.Row="1" Visibility="Collapsed" > 
     <lc:CircularProgress />    
    </Viewbox> 

感谢

+0

你能提供整个xaml(带网格定义)吗? – daryal

+0

Wpf不会在不可见的元素上启动动画。所以一定要先设置可见性,然后再开始动画。你能直接在CircularProgress上设置可视性吗? – Marius

+0

是的,我可以在'CircularProgress'上设置可视性,但这没什么区别。如果我使用标签而不是我的用户控件,则具有相同的效果=>设置“可见性=可见”,但无法看到标签:/ – sinkien

回答

1

变化ViewBox.Visibility = VisiblecpProgress.Visibility = Visible并确保电网对第1行

+0

ViewBox的高度为155的行(他的ViewBox为方形50x50),所以我认为这里的空间不会是一个问题,或者会呢? 'cpProgress'是视框的名称。如果我在ViewBox上设置Visibility,它不会渲染,在我的USerControl('lc:CircularProgress')上设置可见性具有相同的效果,即不渲染。 – sinkien

0

定义一个适当的行高,我终于来到了这个解决方案问题。这真的很简单:)。 我刚刚忘了,如果我在同一个线程中运行登录过程,因为我的窗口在,UI将挂起,直到登录完成。所以解决方案是产生一个新线程,在其上下文中运行登录,并等待completed标志在UI线程中设置。登录过程必须以异步方式运行,因此UI可以绘制我的用户控件。