Опция SnapsToDevicePixels - PullRequest
       0

Опция SnapsToDevicePixels

1 голос
/ 02 октября 2011

Я пытаюсь стилизовать некоторые вкладки, но столкнулся с этой проблемой, когда цвет рамки изменяется при изменении размера окна. Прежде всего, я использовал этот http://blogs.intuidev.com/post/2010/01/25/TabControlStyling_PartOne.aspx для стилизации вкладок, если вам интересно узнать код. Кроме того, вот картинка того, что не так. enter image description here

EDIT:

    <Color x:Key="BorderColor_Base">#888</Color>

    <Color x:Key="TabControl_BackgroundColor_Base">#CCC</Color>

    <SolidColorBrush x:Key="TabControl_BackgroundBrush_Base" 
                   Color="{StaticResource TabControl_BackgroundColor_Base}"/>

    <LinearGradientBrush x:Key="TabItemPanel_BackgroundBrush" 
                       StartPoint="0,0" EndPoint="0,1">
        <LinearGradientBrush.GradientStops>
            <GradientStop Offset="0.98" Color="Transparent"/>
            <GradientStop Offset="0.99" 
           Color="{StaticResource BorderColor_Base}"/>
        </LinearGradientBrush.GradientStops>
    </LinearGradientBrush>

    <SolidColorBrush x:Key="TabItem_BorderBrush_Selected" 
                   Color="{StaticResource BorderColor_Base}" />
<Style TargetType="{x:Type TabControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TabControl">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="1*"/>
                        <RowDefinition Height="10*"/>
                    </Grid.RowDefinitions>
                    <Border Background="{StaticResource TabItemPanel_BackgroundBrush}" 
                     Padding="{StaticResource TabItemPanel_Padding}">
                        <TabPanel Grid.Row="0" IsItemsHost="True"/>
                    </Border>
                    <ContentPresenter Grid.Row="1" ContentSource="SelectedContent"/>

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <Grid>
                    <Border Name="Border"
                     Background="{StaticResource TabControl_BackgroundBrush_Base}"
                     BorderBrush="{StaticResource TabItem_BorderBrush_Selected}"
                     Margin="{StaticResource TabItemMargin_Selected}"
                     BorderThickness="2,1,1,1">
                        <!-- This is where the Content of the TabItem will be rendered. -->
                        <Viewbox>
                            <TextBlock x:Name="Header">
                                <ContentPresenter x:Name="ContentSite"
                                  ContentSource="Header"
                                   Margin="7,2,12,2"
                                  RecognizesAccessKey="True"/>
                            </TextBlock>
                        </Viewbox>
                    </Border>
                </Grid>


                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="False">
                        <Setter TargetName="Border" Property="Margin" Value="{StaticResource TabItemMargin_Base}" />
                        <Setter Property="Panel.ZIndex" Value="90" />
                    </Trigger>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Panel.ZIndex" Value="100" />
                        <Setter TargetName="Border" Property="BorderThickness" Value="2,1,1,0" />
                        <Setter TargetName="Border" Property="Background" Value="White" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="Header" Property="Background" Value="#CCC" />
                        <Setter TargetName="Header" Property="Foreground" Value="#888" />
                        <Setter Property="Panel.ZIndex" Value="80" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Ответы [ 2 ]

0 голосов
/ 05 октября 2011

Проблема с этой кистью:

<LinearGradientBrush x:Key="TabItemPanel_BackgroundBrush" StartPoint="0,0" EndPoint="0,1">
    <LinearGradientBrush.GradientStops>
        <GradientStop Offset="0.98" Color="Transparent" />
        <GradientStop Offset="0.99" Color="{StaticResource BorderColor_Base}" />
    </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

В качестве фона вы используете градиент от прозрачного до # 888, поэтому вы видите один из цветов "между" прозрачным и # 888.Вместо этого вы можете использовать прозрачный фон и границу # 888, например, так:

<Style TargetType="{x:Type TabControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TabControl">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="1*" />
                        <RowDefinition Height="10*" />
                    </Grid.RowDefinitions>
                    <Border Grid.Row="0" Background="Transparent" BorderBrush="#888" BorderThickness="0,0,0,1" Padding="{StaticResource TabItemPanel_Padding}"
                                SnapsToDevicePixels="True" />
                    <TabPanel Grid.Row="0" IsItemsHost="True" />
                    <ContentPresenter Grid.Row="1" ContentSource="SelectedContent" />

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Возможно, вам придется настроить Margin of the Border и / или TabPanel, чтобы убедиться, что они выровнены правильно.

0 голосов
/ 03 октября 2011

Labas!

Попробуйте увеличить высоту линии, например, установите ее на 5 или 10 пикселей.Если цвет снова неправильный, это означает, что вы неправильно ввели TabControl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...