4

リソースディクショナリで次のスタイルを定義しています。

<!-- ListViewItem Styles-->
<LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0,0" EndPoint="0,1">
    <LinearGradientBrush.GradientStops>
        <GradientStopCollection>
            <GradientStop Color="#F7D073" Offset="0"/>
            <GradientStop Color="#F1A62F" Offset="1"/>
        </GradientStopCollection>
    </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

<LinearGradientBrush x:Key="{x:Static SystemColors.ControlBrushKey}" StartPoint="0,0" EndPoint="0,1">
    <LinearGradientBrush.GradientStops>
        <GradientStopCollection>
            <GradientStop Color="#F7D073" Offset="0"/>
            <GradientStop Color="#F1A62F" Offset="1"/>
        </GradientStopCollection>
    </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

<LinearGradientBrush x:Key="MouseOverBrush" StartPoint="0,0" EndPoint="0,1">
    <LinearGradientBrush.GradientStops>
        <GradientStopCollection>
            <GradientStop Color="#E4F0FD" Offset="0"/>
            <GradientStop Color="#D7EAFD" Offset="1"/>
        </GradientStopCollection>
    </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

<Style TargetType="{x:Type ListViewItem}">
    <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataForeground, Converter={StaticResource ColorToBrushConverter}}" />
    <Setter Property="Padding" Value="1,0,1,0" />
    <Setter Property="FontWeight" Value="Normal" />
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Background" Value="{StaticResource MouseOverBrush}" />
            <Setter Property="BorderBrush" Value="#C6E1FC" />
            <Setter Property="BorderThickness" Value="1" />
        </Trigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="BorderBrush" Value="#909090" />
            <Setter Property="BorderThickness" Value="1" />
        </Trigger>
    </Style.Triggers>
    <Style.Resources>
        <Style TargetType="Border">
            <Setter Property="CornerRadius" Value="2"/>
        </Style>
    </Style.Resources>
</Style>
<!-- /ListViewItem Styles-->

Windows XPを使用していたとき、ハイトライトと選択にグラデーションが使用されていました。今、私はWindows 7の使用に切り替えましたが、グラデーションは使用されなくなったようです。ハイライト/選択色はVSルックの水色になりました。

これが発生する理由と、WindowsXPとWindows7で同じように機能するようにこれを修正するにはどうすればよいですか(マルチプラットフォーム環境があります)

ありがとうございました。

コメント後の完全なソリューション

<LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0,0" EndPoint="0,1">
    <LinearGradientBrush.GradientStops>
        <GradientStopCollection>
            <GradientStop Color="#F7D073" Offset="0"/>
            <GradientStop Color="#F1A62F" Offset="1"/>
        </GradientStopCollection>
    </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

<LinearGradientBrush x:Key="{x:Static SystemColors.ControlBrushKey}" StartPoint="0,0" EndPoint="0,1">
    <LinearGradientBrush.GradientStops>
        <GradientStopCollection>
            <GradientStop Color="#F7D073" Offset="0"/>
            <GradientStop Color="#F1A62F" Offset="1"/>
        </GradientStopCollection>
    </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

<LinearGradientBrush x:Key="MouseOverBrush" StartPoint="0,0" EndPoint="0,1">
    <LinearGradientBrush.GradientStops>
        <GradientStopCollection>
            <GradientStop Color="#E4F0FD" Offset="0"/>
            <GradientStop Color="#D7EAFD" Offset="1"/>
        </GradientStopCollection>
    </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

<Style TargetType="{x:Type ListViewItem}">
    <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataForeground, Converter={StaticResource ColorToBrushConverter}}" />
    <Setter Property="Padding" Value="1,0,1,0" />
    <Setter Property="FontWeight" Value="Normal" />
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Background" Value="{StaticResource MouseOverBrush}" />
            <Setter Property="BorderBrush" Value="#C6E1FC" />
            <Setter Property="BorderThickness" Value="1" />
        </Trigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="BorderBrush" Value="#909090" />
            <Setter Property="BorderThickness" Value="1" />
        </Trigger>
        <!-- This part of the triger is for when Windows Aero theme is turned on Win Vista/7-->
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}, Path=IsSelected}" Value="True" />
                <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}, Path=IsKeyboardFocusWithin}" Value="True" />
            </MultiDataTrigger.Conditions>
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="BorderBrush" Value="#909090" />
            <Setter Property="BorderThickness" Value="1" />
        </MultiDataTrigger>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}, Path=IsSelected}" Value="True" />
                <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}, Path=IsKeyboardFocusWithin}" Value="False" />
            </MultiDataTrigger.Conditions>
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="BorderBrush" Value="#909090" />
            <Setter Property="BorderThickness" Value="1" />
        </MultiDataTrigger>
    </Style.Triggers>
    <Style.Resources>
        <Style TargetType="Border">
            <Setter Property="CornerRadius" Value="2"/>
        </Style>
    </Style.Resources>
</Style>
4

1 に答える 1

4

Aeroのデフォルトのスタイルは、Lunaのテーマとは少し異なります。Aeroでは、デフォルトのスタイルにそのようなトリガーがあります。

<Trigger Property="IsSelected" Value="true">
    <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}"/>
    <!-- ... -->
</Trigger>

ルナにいる間、それは次のように見えます:

<Trigger Property="IsSelected" Value="true">
    <Setter TargetName="Bd" Property="Background"
        Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
    <!-- ... -->
</Trigger>

したがって、Aeroのデフォルトのスタイルを確認できますが、HighlightBrushKeyはまったく使用されていません。これは主に、これらのブラシが単一の単色に基づいているためです。ただし、Aeroテーマには多くのグラデーションがあり、古いスタイルの色では表現できません。

次のように、Aeroに適用するには、Backgroundプロパティも設定する必要があります。

<Trigger Property="IsSelected" Value="true">
    <Setter Property="Background"
        Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
    <!-- ... -->
</Trigger>
于 2011-04-21T02:52:40.933 に答える