2015-09-15 5 views
1

У нас есть проблема, при которой при закрытии общего элемента управления (в дочернем окне), когда выбрана другая вкладка, отличная от первой вкладки, содержимое вкладки отключается, а затем отключается, когда перезагрузка элемента управления. Однако, если вы выберете другую вкладку и вернетесь к исходной вкладке, содержимое будет включено.Содержимое TabItem отключено при выборе разных вкладок

Disabled tab contents

Кто-нибудь есть понимание того, что вызывает первоначальную инвалидизирующую сила по & починки для этого, как я борюсь с этим?

XAML

<customTab:CustomTabControl x:Name="ctcNoteTabControl" Margin="10"> 
    <customTab:CustomTabItem Header="Details"> 
     <Border Background="White" CornerRadius="10"> 
      ... 
     </Border> 
    </customTab:CustomTabItem> 
    <customTab:CustomTabItem Header="Attachments/Email Alerts"> 
     <Border Background="White" CornerRadius="10"> 
      ... 
     </Border> 
    </customTab:CustomTabItem> 
    <customTab:CustomTabItem Header="Assets" x:Name="ctiAssets"> 
     <Border Background="{StaticResource CurveBlockBackground}" CornerRadius="10" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="2"> 
      ... 
     </Border> 
    </customTab:CustomTabItem> 
</customTab:CustomTabControl> 

C# - Пользовательский класс наследующий TabControl

using System; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Ink; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 

namespace ReACTSL.Control 
{ 
    public class CustomTabControl : TabControl 
    { 
     protected override void OnKeyDown(KeyEventArgs e) 
     { 
      switch (e.Key) 
      { 
       case Key.Home: 
       case Key.End: 
        e.Handled = true; 
        break; 
       default: 
        break; 
      } 

      base.OnKeyDown(e); 
     } 
    } 
} 

C# - Пользовательский класс наследующий TabItem

using System; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Ink; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 

namespace ReACTSL.Control 
{ 
    public class CustomTabItem : TabItem 
    { 
     protected override void OnKeyDown(KeyEventArgs e) 
     { 
      switch (e.Key) 
      { 
       case Key.Home: 
       case Key.End: 
       case Key.Left: 
       case Key.Right: 
       case Key.Up: 
       case Key.Down: 
        e.Handled = true; 
        break; 
       default: 
        break; 
      } 

      base.OnKeyDown(e); 
     } 
    } 
} 
+0

У вас есть пример кода для обработки вкладок? – matt

+1

Элемент управления вкладкой - это класс System.Windows.Controls.TabControl в System.Windows.Controls.dll для Silverlight 5 (SDK). Единственное отличие состоит в том, что мы обрабатываем событие OnKeyDown, чтобы остановить поведение по умолчанию при переключении между выбранными вкладками при использовании клавиш вверх, слева, справа и вниз –

ответ

2

Я нашел ответ и, к счастью, это не проблема, связанная с TabControl.

После дальнейшего изучения проблема возникла только при нажатии кнопки «Сохранить», а не на кнопке «Отмена» или «Закрытие дочерних окон». Единственная разница между ними, помимо вызова службы для сохранения содержимого, заключается в использовании элемента управления BusyIndicator из той же System.Windows.Controls.dll для Silverlight 5 (SDK).

Это отображается во время вызова службы выполняется

busyIndicator.IsBusy = true; 

Однако это не было никогда остановок от показа после того, как вызов службы вернулся и ответ был обработан. По мере совместного использования элемента управления это означает, что вкладка, выбранная при нажатии кнопки «Сохранить», осталась отключенной, по какой-то причине я не уверен.

Я просто установил для свойства IsBusy значение false перед закрытием общего элемента управления, и все было включено после повторного открытия общего элемента управления.

busyIndicator.IsBusy = false;