NavigationBackButtonNormalStyle忽略覆盖的AppBarItemForegroundThemeBrush

时间:2014-08-08 11:20:20

标签: c# xaml windows-runtime winrt-xaml

我正在尝试修改NavigationBackButtonNormalStyle的颜色以适应我的应用设计。 不幸的是,它忽略了我的AppBarItemForegroundThemeBrush,如果忽略了其他画笔,它就不会像它那样奇怪。但视觉状态等工作得很好。

这是NavigationBackButtonNormalStyle(在themeresources.xaml中找到):

<Style x:Key="NavigationBackButtonNormalStyle" TargetType="Button">
    <Setter Property="Foreground" Value="{ThemeResource AppBarItemForegroundThemeBrush}" />
    <Setter Property="VerticalAlignment" Value="Top" />
    <Setter Property="HorizontalAlignment" Value="Left" />
    <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
    <Setter Property="FontWeight" Value="Normal" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="Button">
          <Grid Background="Transparent" x:Name="RootGrid">
            <VisualStateManager.VisualStateGroups>
              <VisualStateGroup x:Name="CommonStates">
                <VisualState x:Name="Normal" />
                <VisualState x:Name="PointerOver">
                  <Storyboard>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="Ellipse">
                      <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource AppBarItemPointerOverBackgroundThemeBrush}" />
                    </ObjectAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="Content">
                      <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource AppBarItemPointerOverForegroundThemeBrush}" />
                    </ObjectAnimationUsingKeyFrames>
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Pressed">
                  <Storyboard>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Stroke" Storyboard.TargetName="Ellipse">
                      <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource AppBarItemForegroundThemeBrush}" />
                    </ObjectAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="Ellipse">
                      <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource AppBarItemForegroundThemeBrush}" />
                    </ObjectAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="Content">
                      <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource AppBarItemPressedForegroundThemeBrush}" />
                    </ObjectAnimationUsingKeyFrames>
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Disabled">
                  <Storyboard>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Visibility">
                      <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed" />
                    </ObjectAnimationUsingKeyFrames>
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
              <VisualStateGroup x:Name="FocusStates">
                <VisualState x:Name="Focused">
                  <Storyboard>
                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisualWhite" />
                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisualBlack" />
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Unfocused" />
                <VisualState x:Name="PointerFocused" />
              </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Grid Height="41" Width="41">
              <Ellipse x:Name="Ellipse" Fill="{ThemeResource AppBarItemBackgroundThemeBrush}" Stroke="{ThemeResource AppBarItemForegroundThemeBrush}" StrokeThickness="2" UseLayoutRounding="False" />
              <ContentPresenter x:Name="Content" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <PathIcon Data="F1 M 17.4126,18L 24.0752,11L 17.6558,11L 8.77931,20.4678L 8.77931,20.5322L 17.6558,30L 24.0752,30L 17.4126,23L 32,23L 32,18L 17.4126,18 Z " />
              </ContentPresenter>
            </Grid>
            <Rectangle x:Name="FocusVisualWhite" IsHitTestVisible="False" Opacity="0" StrokeDashOffset="1.5" StrokeEndLineCap="Square" Stroke="{ThemeResource FocusVisualWhiteStrokeThemeBrush}" StrokeDashArray="1,1" />
            <Rectangle x:Name="FocusVisualBlack" IsHitTestVisible="False" Opacity="0" StrokeDashOffset="0.5" StrokeEndLineCap="Square" Stroke="{ThemeResource FocusVisualBlackStrokeThemeBrush}" StrokeDashArray="1,1" />
          </Grid>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>

我的自定义主题(基于主题Light):

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Example">
    [...]
    <Color x:Key="ForegroundColor">#FFFFFFFF</Color>
    [...]
    <SolidColorBrush x:Key="AppBarItemForegroundThemeBrush" Color="{ThemeResource ForegroundColor}"/>
    [...]
</ResourceDictionary>

这就是我在App.xaml开头引用主题文件的方式:

<ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Light" Source="ThemeLight.xaml"/>
</ResourceDictionary.ThemeDictionaries>

最后,我将主题设置为Light

public App()
{
    this.InitializeComponent();
    this.Suspending += OnSuspending;
    this.UnhandledException += OnUnhandledException;

    RequestedTheme = ApplicationTheme.Light;
}

我是否会遗漏某些内容或为何忽略了AppBarItemForegroundThemeBrush的价值?

1 个答案:

答案 0 :(得分:0)

你需要做

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Example">
    [...]
    <SolidColorBrush x:Key="ForegroundColor">#FFFFFFFF</SolidColorBrush>
    [...]
    <SolidColorBrush x:Key="AppBarItemForegroundThemeBrush" Color="{StaticResource ForegroundColor}"/>
    [...]
</ResourceDictionary>
并将其添加到App.xaml
 <Application.Resources>
        <ResourceDictionary>
            <viewModel:ViewModelLocator x:Key="Locator"/>
         
            <ResourceDictionary.MergedDictionaries>
               
                <ResourceDictionary Source="/Styles/MyStyle.xaml"/>
               
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
看见 Theming in Universal apps