2013-11-12 3 views
0

В моем приложении WPF у меня есть ResourceDictionary с некоторыми элементами управления:Исчезающие элементы управления ресурсами?

<ResourceDictionary> 
    <Border x:Key="SystemBorder"> 
     <!-- SomeContent --> 
    </Border> 

    <Border x:Key="DateBorder"> 
     <!-- SomeContent --> 
    </Border> 

    <Button x:Key="QuitButton"> 
     <!-- SomeContent --> 
    </Button> 
</ResourceDictionary> 

Теперь в моем окне У меня есть TabControl с некоторыми TabItem, внутри каждого TabItem, что элементы управления используются.
Но когда я меняю вкладки, все в порядке, но когда я вернусь к вкладке, этих элементов управления не будет.

Я попытался использовать x:Shared="False", но это не имело значения.
Как я могу решить эту проблему?

Edit:
Каждый TabItem имеет ту же структуру:

<TabItem> 
    <Grid> 
     <Grid.RowDefinitions/> 
      <!-- Defs --> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions/> 
      <!-- Defs --> 
     </Grid.ColumnDefinitions> 
    </Grid> 

     <Border x:Name="Menu1" Grid.Row="0" Grid.Column="0"> 
      <ContentControl x:Name="Date1" Content="{DynamicResource DateBorder}"> 
      <!-- some Buttons --> 
      <ContentControl x:Name="QuitButton1" Content="{DynamicResource QuitButton}"/> 
     </Border> 
     <!-- some more Borders --> 
     <ContentControl x:Name="SystemBorder1" Grid.Row="3" Grid.Column="0" Content="{DynamicResource SystemBorder}"/> 
</TabItem> 

DateBorder также тему, которая обновляет на дату каждый второй.

+0

так, они там, а потом они исчезают? – Noctis

+0

И как вкладки используют эти ресурсы? Вы должны добавить код. Но, пожалуйста, только основные части. – DHN

+0

Ну там просто нет, пусто, когда я вернусь назад. Я отредактирую еще один код. – hbsrud

ответ

-1

Я нашел Обход с кодом позади, так что я поделюсь с вами:

C#:

private void TabControl_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) 
{ 
    for(int i = 1; i < 4; i++) 
    { 
     FindName("Date" + i).Content = null; 
     FindName("QuitButton" + i).Content = null; 
     FindName("SystemBorder" + i).Content = null; 
    } 

    var tc = (TabControl) sender; 
    var index = tc.SelectedIndex + 1; 

    FindName("Date" + index).Content = FindResource("DateBorder"); 
    FindName("QuitButton" + index).Content = FindResource("QuitButton"); 
    FindName("SystemBorder" + index).Content = FindResource("SystemBorder"); 
} 

VB:

Private Sub TabControl_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) 
    For i = 1 To 3 
     FindName("Date" & i).Content = Nothing 
     FindName("QuitButton" & i).Content = Nothing 
     FindName("SystemBorder" & i).Content = Nothing 
    Next 

    Dim tc = CType(sender, TabControl) 
    Dim index = tc.SelectedIndex + 1 

    FindName("Date" & index).Content = FindResource("DateBorder") 
    FindName("QuitButton" & index).Content = FindResource("QuitButton") 
    FindName("SystemBorder" & index).Content = FindResource("SystemBorder") 
End Sub 
2

Если бы мне пришлось делать ставки, это, вероятно, потому, что границы не могут быть в визуальном дереве несколько раз.

Почему вы не связываться с коллекцией и создать DataTemplate для вкладок:

<DataTemplate x:Key="TabTemplate"> 
    <Grid> 
     <Grid.RowDefinitions/> 
      <!-- Defs --> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions/> 
      <!-- Defs --> 
     </Grid.ColumnDefinitions> 
    </Grid> 
    <Border Grid.Row="0" Grid.Column="0"> 
     <!-- some Menu1--> 
     <Border> 
      <!-- DateBorder--> 
     </Border> 
     <Button> 
      <!-- QuitButton --> 
     </Button> 
     </Border> 
    </Border> 
    <!-- some more Borders --> 
    <Border Grid.Row="3" Grid.Column="0" > 
     <!-- SomeContent --> 
    </Border> 
</DataTemplate> 

<TabControl ItemSource="{Binding Collection}" ItemTemplate="{StaticResource TabTemplate}" /> 
+0

Я никогда не использовал DataTemplates, и хорошо ... поэтому у меня даже не было этой идеи, чтобы это сделать. Содержимое TabItems также индивидуально для каждой вкладки, и мне нужен программный доступ к большинству элементов управления внутри. – hbsrud

+0

В этом случае, возможно, вам нужно просто определить эти границы/кнопки на каждой отдельной вкладке и отказаться от нее в качестве ресурса. Или, насколько мне больно говорить ... В зависимости от вашего контента, измените шаблон TabItem. –

+0

Это был бы тот же код более 10 раз, я надеялся сохранить код четко. – hbsrud

Смежные вопросы