【问题标题】:Visibility of ViewBox set from code从代码中设置的 ViewBox 的可见性
【发布时间】:2013-01-20 09:51:33
【问题描述】:

在我的窗口上,我有一个 ViewBox 控件,其中包含一个自定义进度条。我在设计模式下将其 Visibility 设置为 Collapsed,因为我只需要在特定时刻(登录到应用程序期间)显示它。

在我的进度条(即用户控件)中,我有 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>

谢谢

【问题讨论】:

  • 你能提供整个xaml(带有网格定义)吗?
  • Wpf 不会在不可见的元素上启动动画。所以一定要先设置可见性,然后再开始动画。能直接在 CircularProgress 上设置 Visibility 吗?
  • 是的,我可以在CircularProgress 上设置可见性,但这没什么区别。如果我使用标签而不是我的用户控件,我有同样的效果 => 设置Visibility = Visible,但看不到标签:/

标签: c# wpf visibility viewbox


【解决方案1】:

ViewBox.Visibility = Visible 更改为 cpProgress.Visibility = Visible 并确保 Grid 为第 1 行定义了适当的行高。

【讨论】:

  • ViewBox所在行的高度为155(他ViewBox是一个50x50的正方形),所以我认为这里的空间不会有问题,还是会? cpProgress 是视图框的名称。如果我在 ViewBox 上设置 Visibility,它不会渲染,在我的 USerControl (lc:CircularProgress) 上设置 Visibility 具有相同的效果,即不渲染。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2023-03-31
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多