在Wpf中替换SystemColors会抛出ArgumentException

时间:2013-12-02 08:56:50

标签: wpf

不是为每个控件创建显式的新样式,我认为只要更换颜色就会有很长的路要走。我尝试将以下内容添加到我的App.xaml中。在这种情况下,它应该对应于原始的Windows 7 Aero颜色,因此不应该看到任何更改。

奇怪的是我得到以下异常,为什么它似乎使用颜色值作为键?我错过了什么?

System.ArgumentException: {"Item has already been added. Key in dictionary: '#FF000000'  Key being added: '#FF000000'"}

的App.xaml

<Application x:Class="Frankenbuild.Wpf.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Application.Resources>

        <!-- aero original colors -->
        <SolidColorBrush x:Key="{x:Static SystemColors.ActiveBorderColor}" Color="#FFB4B4B4"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ActiveCaptionColor}" Color="#FF99B4D1"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ActiveCaptionTextColor}" Color="#FF000000"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.AppWorkspaceColor}" Color="#FFABABAB"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlColor}" Color="#FFF0F0F0"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlDarkColor}" Color="#FFA0A0A0"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlDarkDarkColor}" Color="#FF696969"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlLightColor}" Color="#FFE3E3E3"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlLightLightColor}" Color="#FFFFFFFF"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextColor}" Color="#FF000000"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.DesktopColor}" Color="#FF000000"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.GradientActiveCaptionColor}" Color="#FFB9D1EA"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.GradientInactiveCaptionColor}" Color="#FFD7E4F2"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.GrayTextColor}" Color="#FF6D6D6D"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightColor}" Color="#FF3399FF"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextColor}" Color="#FFFFFFFF"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.HotTrackColor}" Color="#FF0066CC"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveBorderColor}" Color="#FFF4F7FC"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveCaptionColor}" Color="#FFBFCDDB"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveCaptionTextColor}" Color="#FF434E54"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.InfoColor}" Color="#FFFFFFE1"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.InfoTextColor}" Color="#FF000000"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.MenuColor}" Color="#FFF0F0F0"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.MenuBarColor}" Color="#FFF0F0F0"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.MenuHighlightColor}" Color="#FF3399FF"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.MenuTextColor}" Color="#FF000000"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ScrollBarColor}" Color="#FFC8C8C8"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.WindowColor}" Color="#FFFFFFFF"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.WindowFrameColor}" Color="#FF646464"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.WindowTextColor}" Color="#FF000000"/>

    </Application.Resources>
</Application>

1 个答案:

答案 0 :(得分:2)

尝试设置ResourceKey代替...而不是这样:

<SolidColorBrush x:Key="{x:Static SystemColors.ActiveBorderColor}" Color="#FFB4B4B4"/>

...试试这个:

<SolidColorBrush x:Key="{x:Static SystemColors.ActiveBorderColorKey}" Color="#FFB4B4B4"/>

有关详细信息,请查看MSDN上的SystemColors Properties页面。