有没有办法指定哪些主题用于某些UI元素?

时间:2012-09-26 19:02:46

标签: user-interface windows-8 themes

例如,使用Light Theme意味着背面和appbar按钮是黑色的。 但是,当使用较暗的应用程序栏颜色时,按钮的对比度非常明显。 这是一个屏幕抓取,忽略白色的质量。 http://i.imgur.com/2EzSd.png

有没有办法直接访问导致一个主题的图标与其他人的图标?

注意:我正在构建一个C#+ XAML应用程序。

4 个答案:

答案 0 :(得分:3)

首先,按钮看起来会像这样:

start

在StandartStyles.xml下,您必须首先查找样式AppBarButtonStyle以更改图标颜色查找<Setter Property="Foreground" Value="{StaticResource AppBarItemForegroundThemeBrush}"/>

现在,您可以使用您想要的颜色替换{StaticResource AppBarItemForegroundThemeBrush} white#FFFFFFFF。现在你已经改变了你的图标的视觉效果,你应该有这样的东西

enter image description here

现在您需要设置下面的文本样式,方法是找到几行</TextBlock标记,并在那里更改forground属性

step two

现在你有一个漂亮的图标但是只要你将鼠标移到它上面就会变得安静丑陋。为了更改不同状态,请向下移动到<VisualStateGroup x:Name="CommonStates">标记,您会发现标记为<VisualState x:Name="PointerOver">,因为您可能会怀疑当您将鼠标悬停在按钮上时,这会更改按钮的属性。

    <VisualState x:Name="PointerOver">
        <Storyboard>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground">
    <!-- the background of the actionbar-> !--><DiscreteObjectKeyFrame KeyTime="0" Value="yourBackgroundColor"/> 
                                    </ObjectAnimationUsingKeyFrames>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground">
    <!-- the icon of the actionbar-> --><DiscreteObjectKeyFrame KeyTime="0" Value="yourActionBarIconColor"/> 
                                    </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </VisualState>

如果你继续向下滚动,你会发现<VisualState x:Name="Pressed">等等。

答案 1 :(得分:0)

您可以通过展开Visual Studio中项目下的“引用”节点,然后展开Windows Library for JavasScript 1.0节点,然后展开css文件夹来查看每个主题使用的CSS。

AppBar颜色的相关行似乎从我的ui-dark.css文件的第2621行开始。第2448行还指定了.win-commandimage项的颜色,这是大多数appbar命令的图标。您应该能够在项目的样式表中覆盖这些设置。

答案 2 :(得分:0)

事实证明,Windows 8只使用了Foreground颜色(它从所选主题样式继承)。

这意味着你需要做的就是设置前景来改变图标颜色,赢家!

答案 3 :(得分:0)

每个主题的App Bar按钮的颜色被定义为您可以覆盖的资源。我在Windows 8 – Overriding Metro app resources处描述了这个过程。

对于你的方法应该足够简单,以获取Light App Bar按钮资源并使用它们来覆盖Dark资源。