WPF TabControl XP Проблема со стилем - PullRequest
1 голос
/ 02 октября 2009

Я работаю над стилизацией TabControl на ПК под управлением Windows 7, и все выглядело нормально, но когда я попытался запустить его в Windows XP, я получил отвратительную белую рамку вокруг TabControl:

alt text

Я полагаю, что это та же проблема, что и с luna (описано здесь TabControl без рамки wpf (XP) ), но я не знаю, что изменить в шаблоне ...

Стиль для TabControl следующий:

<Style TargetType="{x:Type TabItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid>
                        <Border Name="Border" Margin="0,10,0,-10" BorderBrush="Transparent" BorderThickness="1,1,0,0" CornerRadius="5,0,0,5">
                            <Border.Background>
                                <LinearGradientBrush EndPoint="1.407,0.5" StartPoint="-0.407,0.5">
                                    <GradientStop Color="#49000000" Offset="0"/>
                                    <GradientStop Offset="1" Color="#09FFFFFF"/>
                                </LinearGradientBrush>
                            </Border.Background>
                            <ContentPresenter x:Name="ContentSite" 
                                              TextBlock.FontSize="15"
                                              TextBlock.Foreground="#22ffffff"
                                              VerticalAlignment="Center" 
                                              HorizontalAlignment="Center" 
                                              ContentSource="Header" 
                                              Margin="5,5,2,5" 
                                              RecognizesAccessKey="True">
                                <ContentPresenter.LayoutTransform>
                                    <RotateTransform Angle="270" />
                                </ContentPresenter.LayoutTransform>
                            </ContentPresenter>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Panel.ZIndex" Value="100" />
                            <Setter TargetName="Border" Property="Background" Value="Red" />
                            <Setter TargetName="Border" Property="BorderThickness" Value="1,1,0,0" />
                            <Setter TargetName="ContentSite" Property="TextBlock.Foreground" Value="White"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter TargetName="Border" Property="Background" Value="DarkRed" />
                            <Setter TargetName="Border" Property="BorderBrush" Value="Black" />
                            <Setter Property="Foreground" Value="DarkGray" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

и фактический XAML TabControl '(ничего особенного):

<TabControl Grid.Row="1" Grid.Column="0" Margin="5,5" TabStripPlacement="Left" 
                Background="Transparent" HorizontalAlignment="Stretch" BorderThickness="0,0,0,0">
        <TabControl.BitmapEffect>
            <DropShadowBitmapEffect Color="Black" Direction="270"/>
        </TabControl.BitmapEffect>

        <TabItem Header="Tab Item 1"/>
        <TabItem Header="Tab Item 2"/>
        <TabItem Header="Tab Item 3"/>
        <TabItem Header="Tab Item 4"/>
    </TabControl>

любая помощь будет высоко ценится!

1 Ответ

2 голосов
/ 02 октября 2009

Нашел решение, нормальный метод - вытащить простой стилизованный элемент управления в blend обособленно:)

Вот стиль, который я должен был добавить, чтобы удалить эту границу на случай, если кому-то будет интересно:

<Style TargetType="{x:Type TabControl}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabControl}">
                    <Grid KeyboardNavigation.TabNavigation="Local">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="33"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <TabPanel Grid.Column="0" Margin="0,0,4,-1" x:Name="HeaderPanel" Background="Transparent" IsItemsHost="True" Panel.ZIndex="1" KeyboardNavigation.TabIndex="1"/>
                        <Border Grid.Column="1" x:Name="Border" Background="{DynamicResource WindowBackgroundBrush}" BorderBrush="{DynamicResource SolidBorderBrush}" BorderThickness="0" CornerRadius="2" KeyboardNavigation.DirectionalNavigation="Contained" KeyboardNavigation.TabNavigation="Local" KeyboardNavigation.TabIndex="2">
                            <ContentPresenter Margin="4" x:Name="PART_SelectedContentHost" ContentSource="SelectedContent"/>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Foreground" Value="{DynamicResource DisabledForegroundBrush}"/>
                            <Setter Property="BorderBrush" Value="{DynamicResource DisabledBorderBrush}" TargetName="Border"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
...