2014-10-16 3 views
1

У меня есть окно с двумя TabControls. Один - Left-Aligned, другой - вправо. Заголовки TabControls выровнены в верхней строке.WPF: два TabControls/Switching работают под Win7/.NET 4.5, но не под Windows 8.1/.NET 4.5.1

Всякий раз, когда я нажимаю TabItem, другой TabControl не сфокусирован.

Это отлично работает на моем компьютере разработки (Windows 7, .NET Framework 4.5).

Однако, когда я выполняю его под ПК с Windows 8.1 (.NET 4.5.1), я не могу переключиться на выровненный по вертикали TabControl. Когда я нажимаю на TabItem внутри него, ничего не происходит.

XAML из MainWindow:

<Window x:Class="TabGroupProblem.MainWindow" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> 
     <Grid> 
      <TabControl GotFocus="TabControl_GotFocus" x:Name="c1"> 
       <TabItem Header="One">h</TabItem> 
       <TabItem Header="Two">i</TabItem> 
      </TabControl> 

      <TabControl GotFocus="TabControl_GotFocus_1" x:Name="c2"> 
       <TabControl.Resources> 
        <Style TargetType="{x:Type TabPanel}"> 
         <Setter Property="HorizontalAlignment" Value="Right" /> 
        </Style> 
       </TabControl.Resources> 
       <TabItem Header="Three">j</TabItem> 
       <TabItem Header="four">k</TabItem> 
      </TabControl> 
     </Grid> 
    </Window> 

Обработчики событий:

private void TabControl_GotFocus(object sender, RoutedEventArgs e) 
    { 
     // c1 to foreground 
     System.Windows.Controls.Grid.SetZIndex(c2, -1); 
     c2.SelectedIndex = -1; 
    } 

    private void TabControl_GotFocus_1(object sender, RoutedEventArgs e) 
    { 
     // c2 to foreground 
     System.Windows.Controls.Grid.SetZIndex(c2, 1); 
     c1.SelectedIndex = -1; 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     System.Windows.Controls.Grid.SetZIndex(c1, 0); 
     System.Windows.Controls.Grid.SetZIndex(c2, -1); 
     c2.SelectedIndex = -1; 
    } 

Почему это произошло, и что я могу сделать против него?

Screenshot

редактировать: Switched Конечных рамок для .NET 4.5.1 на моем компьютере разработки. Переключение между TabControls все еще работает на моем ПК (и все еще не на компьютере с Windows 8.1)

ответ

1

Вы размещаете два TabControls непосредственно друг над другом, но все же ожидаете, что сможете сфокусировать один снизу. Очевидно, что это работает в Win7, но, похоже, Windows 8 использует другой шаблон управления, который потенциально ест клики мыши на «пустой» бит TabPanel.

Может быть, это добавление прозрачной кистью, так что вы могли бы попробовать простой:

<TabControl.Resources> 
    <Style TargetType="{x:Type TabPanel}"> 
     <Setter Property="Background" Value="{x:Null}" /> 
    </Style> 
</TabControl.Resources> 

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

+0

К сожалению, это не работает. Я думаю, кнопки переключались между «штабелированными» холстами/сетками? (Итак, я должен преобразовать каждый TabItem в такой слой?) –

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