1

我有一个 Silverlight 用户控件,我有一个使用几个 tabitems 的 tabcontrol。现在每个 tabitem 都是另一个 Usercontrol。我想知道是否有一种方法可以访问这些用户控件 tabitems 之一的对象。

例如,如果我的主用户控件中有一个 xaml:

<controls:TabControl x:Name="TabControl" Grid.Row="1" Grid.Column="1" Foreground="#234BC3">
            <controls:TabItem Header="Prestaties" x:Name="TabPres" Visibility="Collapsed">
                <nsl:PrestatiesUC></nsl:PrestatiesUC>
            </controls:TabItem>
            <controls:TabItem Header="Protocollen" x:Name="TabProt" Visibility="Collapsed">
                <nsl:ProtocollenUC></nsl:ProtocollenUC>
            </controls:TabItem>
            <controls:TabItem Header="Adt" x:Name="TabAdt" Visibility="Collapsed">
                <nsl:AdtUC></nsl:AdtUC>
            </controls:TabItem>
        </controls:TabControl>

在我的 PrestatiesUC 用户控件中,我有一个对象:

<Button x:Name="btnReSend" Content="Resend" Width="75" Height="25" Margin="10" Click="resend_Button"/>

我将如何在主用户控件代码中动态禁用它在启动时的可见性?

我试过这样的事情:

PrestatiesBAMUC tmp =  new PrestatiesBAMUC();
tmp.btnReSend.Visibility = Visibility.Collapsed;

但这没有用。

有任何想法吗?

4

1 回答 1

1

在主用户控件 Loaded 事件中,这应该可以工作:-

((PrestatiesUC)TabPres.Content).btnReSend.Visibility = Visibility.Collapsed;

然而它闻起来很糟糕。让主页这样的东西对 UserControl 的内部结构有如此深入的了解通常不是一个好主意。

让“Prestaties”在 is Loaded 事件中设置按钮可见性不是更好吗?

如果不是,则创建一些由 PrestatiesUC 实现的接口(以及可能涉及的其他用户控件)。在主页面中加载期间简单地枚举选项卡集并调用此接口上的方法,传入一些状态对象。然后,用户控件对其包含的控件的状态做出选择。

如果这似乎超出了顶部,那么至少向用户控件添加一个属性以隐藏按钮本身:-

 // In PrestiesUC
 public bool ReSendVisible
 {
    get { return btnReSend.Visibility == Visibility.Visible; }
    set { btnReSend.Visibility = value ? Visibility.Visible : Visibility.Collapsed; }
 }

现在您在主用户控件中的代码如下所示:-

((PrestatiesUC)TabPres.Content).ReSendVisible = False;
于 2010-01-25T13:10:40.543 回答