将自定义样式添加到WPF中现有主题中的元素

时间:2013-02-12 20:55:56

标签: wpf xaml

我认为以前没有问过这个问题,如果有的话请重新定位我。我是WPF的新手,我已经尝试了所有我能想到但没有成功的东西,我被卡住了。

我正在使用 WPF主题,我想添加一些我创建的自定义样式。例如,所有TextBlock都应该具有 Red 前景,但我在 Blue 中有一组TextBlock

到目前为止,我一直在xaml中执行此操作,在资源中创建<Style></Style>,并使用Style="{StaticResource StyleName}"进行调用。但我想将它添加到主题文件中,我不知道如何给它命名并从xaml调用它。

我想我会从这样的事情开始,但我如何链接这两个元素呢?

在主题文件(MyStyles.xaml或TextEdit.xaml或类似文件)中:

<Style TargetType="{x:Type TextBlock}" x:Key="KeyName" ???>
      <Setter Property="Foreground" Value="Blue" />
</Style>

然后在我的 xaml:

<TextBlock Name="TextBlockName"
      Style="{???}">
</TextBlock>

我需要将此样式放在主题中,因为该程序将允许用户更改主题,并且这些样式不能在xaml中进行硬编码。

2 个答案:

答案 0 :(得分:1)

如果您已加载主题文件,则可以使用与本地样式/资源相同的方式访问任何样式/资源

如果使用Style="{StaticResource StyleName}",它将首先在Window / UserControl中查找,如果没有找到,它将查看已加载的资源字典。所以只要你加载了主题(资源字典)它就可以正常工作。

答案 1 :(得分:1)

您希望首先将该资源文件合并到您的资源中:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MyStyles.xaml" />
        </ResourceDictionary.MergedDictionaries>
        <dxc:IntToBooleanConverter x:Key="IntToBooleanConverter" />
        (...)
    </ResourceDictionary>
</UserControl.Resources>

然后您可以将其与

一起使用
<TextBlock Name="TextBlockName" Style="{StaticResource KeyName}" />