【问题标题】:Visibility of 2 user component in SilverlightSilverlight 中 2 个用户组件的可见性
【发布时间】:2025-12-14 21:15:02
【问题描述】:

在我的应用程序中有一个侧边栏,其中包含这两个组件:

        <Grid x:Name="AF" Visibility="Visibility">
            <betata:AForm Height="508" VerticalAlignment="Top"/>
        </Grid>
        <Grid x:Name="AR" Visibility="Collapsed">
            <betata:AReg Height="508" VerticalAlignment="Top"/>
        </Grid>

在 AForm 中使用此方法获得超链接按钮:

    private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
    {
        betata.Views.Sidebar.Sidebar sd = new Sidebar();
        sd.showAR(this);
    }

回到我的侧边栏代码,得到了另一个名为 showAR 的方法,具有这些功能:

    public void showAR(AForm aForm)
    { 
        this.AR.Visibility = Visibility.Visible;
        aForm.Visibility = Visibility.Collapsed;
    }

但我不确定为什么 aForm 会折叠但 AR 无法显示。

【问题讨论】:

  • 因为之前无法解决,最后终于找到了解决方案。但我没有删除,因为我想保留来自@Aligned 的参考

标签: silverlight visibility


【解决方案1】:

问题已在此帖子中得到解答。 Visibility of User Control 可以通过隧道和冒泡解决。这是silverlight的新路由事件功能

【讨论】:

    【解决方案2】:

    我会稍微重构一下,使其更简单(这可能有助于解决您的问题)。

    <Grid>
      <betat:AForm x:Name="aForm" Height="508" VerticalAlignment="Top" Visibility="Visible" />
      <betata:AReg x:Name="aReg" Height="508" VerticalAlignment="Top" Visibility="Collapsed" />
    </Grid>
    
     public void showAR() // this is in the code behind (xaml.cs) of the Sidebar UserControl
     { 
          this.aReg.Visibility = Visibility.Visible;
          this.aForm.Visibility = Visibility.Collapsed;
     }
    

    或者您甚至不需要 ShowAR() 并且只需在按钮单击中设置可见性,除非您在其他地方重用该功能。示例:

     private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
     {
          betata.Views.Sidebar.Sidebar sd = new Sidebar();
          sd.aReg.Visibility = Visibility.Visible;
          sd.aForm.Visibility = Visibility.Collapsed;
     }
    

    【讨论】:

    • 我试过@.@它不起作用...我的意思是当我点击超链接按钮时没有响应
    • 似乎点击事件没有连接...您的按钮看起来像:
    • 它知道了 ::
    • 实际上有问题的代码可以让自己消失但不知道为什么不能让 AReg 表单回来
    • @SLim 如果更改可见性没有显示/隐藏它,则可能有其他原因导致问题。你说按钮没反应,你有没有在里面打个断点观察一下?底部是否有一个元素(z-index 或将一个元素放在 XAML 中的更下方并将其放在另一个元素的顶部可以做到这一点)。也许您需要将 RowDefinition 添加到您的整体网格中?