在Silverlight中访问tabitem的对象

时间:2010-01-25 12:49:51

标签: silverlight object tabitem

我有一个Silverlight Usercontrol,我有一个tabcontrol,它使用了几个tabitems。现在每个tabitem都是另一个Usercontrol。我想知道是否有办法访问其中一个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;

但这不起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在主用户控件Loaded事件中,这应该有效: -

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

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

将“Prestaties”设置为Loaded事件中的按钮可见性不是更好吗?

如果不是,则创建一些由PrestatiesUC实现的接口(可能还有其他涉及的Usercontrol)。在主页面中加载期间,只需枚举一组选项卡,并在此接口上调用一个传入某个状态对象的方法。然后,Usercontrols会对其包含的控件的状态做出选择。

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

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

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

((PrestatiesUC)TabPres.Content).ReSendVisible = False;