我正在创建一个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} }的内容仍然是红色的。有没有办法告诉模板使用最终颜色?
答案 0 :(得分:2)
该应用的资源字典并不了解其他字典,与WPF不同DynamicResources
- StaticResource
未经重新评估且{{1}是的,但我认为只有当实际主题发生变化时。您可以自定义该按钮颜色的方法是在模板中使用ThemeResource
并绑定以显示按钮的TemplateBinding
属性,并在Foreground
{{1}中设置该属性您的按钮样式为Foreground
。然后,在您的页面中,您可以通过将按钮的Setter
设置为其他值或使用更改{StaticResource SectionDefaultBrush}
值的派生按钮样式来覆盖它。
理想情况下 - 您应该在字典中定义主题资源,以便画笔根据操作系统主题(特别是高对比度)而变化。你可能想把你的画笔命名为&#34; SectionDefaultThemeBrush&#34;而不只是&#34; SectionDefaultBrush&#34;。