Windows应用商店应用覆盖模板中忽略的资源值

时间:2014-04-24 14:04:06

标签: xaml templates windows-runtime windows-store-apps winrt-xaml

我正在创建一个Windows应用商店应用,其中每个网页都有一个用于标题,按钮等的主色。

App.xaml我已经在每个Brush的xaml文件中创建了一个默认的Page,并为{{Button创建了一个样式模板1}}我在每一页都重复使用的。模板应该使用页面的颜色,但由于某种原因,它们坚持使用默认值。

以下是我的xaml文件。

的App.xaml

<Application
    x:Class="Foo.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Foo"
    RequestedTheme="Light">

  <Application.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary>
          <SolidColorBrush x:Name="SectionDefaultBrush" Color="Red" />
          <Style TargetType="Button" x:Name="NavigationButtonStyle">
            <Setter Property="FontFamily" Value="Myriad Pro" />
            <Setter Property="Template">
              <Setter.Value>
                <ControlTemplate TargetType="Button">
                  <Grid>
                    <Rectangle x:Name="Border" Fill="#f4f4f4" Margin="0" />
                    <TextBlock Foreground="{ ThemeResource SectionDefaultBrush }"  Text=">" FontSize="31" />
                    <ContentPresenter x:Name="Content" VerticalAlignment="Center" Foreground="#5A5A5A" HorizontalAlignment="Left" FontSize="31"/>
                  </Grid>
                </ControlTemplate>
              </Setter.Value>
            </Setter>
          </Style>
        </ResourceDictionary>
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Application.Resources>
</Application>

SomePage.xaml

<Page
    x:Class="Foo.Pages.SomePage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

  <Page.Resources>
    <SolidColorBrush x:Key="SectionDefaultBrush" Color="Green" />
  </Page.Resources>

  <ViewBox>
    <Canvas>
      <TextBlock Text="Some text" Foreground="{ ThemeResource SectionDefaultBrush }" Canvas.Left="130" TextWrapping="Wrap" Canvas.Top="252" Height="177" Width="507" FontFamily="Myriad Pro"  FontSize="54" />
      <Button Content="Click me" Style="{ ThemeResource NavigationButtonStyle }" Canvas.Left="130" Canvas.Top="900" Width="507" Height="48" />
    </Canvas>
  <ViewBox>

在此示例中,TextBlock的文字颜色为预期的绿色(如果我从Brush删除Page.Resources,则为红色),但是{{1} }的内容仍然是红色的。有没有办法告诉模板使用最终颜色?

1 个答案:

答案 0 :(得分:2)

该应用的资源字典并不了解其他字典,与WPF不同DynamicResources - StaticResource未经重新评估且{{1}是的,但我认为只有当实际主题发生变化时。您可以自定义该按钮颜色的方法是在模板中使用ThemeResource并绑定以显示按钮的TemplateBinding属性,并在Foreground {{1}中设置该属性您的按钮样式为Foreground。然后,在您的页面中,您可以通过将按钮的Setter设置为其他值或使用更改{StaticResource SectionDefaultBrush}值的派生按钮样式来覆盖它。

理想情况下 - 您应该在字典中定义主题资源,以便画笔根据操作系统主题(特别是高对比度)而变化。你可能想把你的画笔命名为&#34; SectionDefaultThemeBrush&#34;而不只是&#34; SectionDefaultBrush&#34;。