Доступ к объекту tabitem в Silverlight - PullRequest
1 голос
/ 25 января 2010

У меня есть Silverlight Usercontrol, где у меня есть tabcontrol, который использует пару tabitems. Теперь каждый tabitem является другим Usercontrol. Мне было интересно, есть ли способ получить доступ к объекту одной из этих таблиц управления пользователями.

Например, если в моем основном пользовательском контроле есть 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 Ответ

1 голос
/ 25 января 2010

В главном пользовательском элементе управления Loaded событие должно работать: -

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

Однако пахнет плохо. Как правило, не очень хорошая идея, чтобы что-то вроде главной страницы обладало такими глубокими знаниями о внутренней структуре UserControl.

Не лучше ли, чтобы "Prestaties" установили видимость кнопок в событии Loaded?

Если нет, то создайте некоторый Интерфейс, который реализован PrestatiesUC (и, вероятно, другие вовлеченные элементы управления пользователя). Во время Loaded на главной странице просто перечисляет набор вкладок и вызывает метод на этом интерфейсе, передавая некоторый объект состояния. Затем 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;
...