将主题应用到wpf并使用样式



我正在尝试将主题应用于一堆wpf项目。有一个程序集包含泛型。Xaml和其他应用程序。据我所知,我不能使用ThemeInfo属性与ResourceDictionaryLocation。ExternalLocation,因为名称必须与我的程序相同,但我有多个程序…

所以我搜索并发现我只需要在app.xaml

中包含字典作为MergedDictionary
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/ClassLibrary1;component/Themes/generic.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

这基本上是有效的。但是如果我为控件使用样式,它就不会应用通用样式。Xaml style:

通用。classlibrary .dll中的xaml

<ResourceDictionary x:Class="ClassLibrary1.Themes.generic"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type Button}">
    <Setter Property="Background"
            Value="Black" />
</Style>

程序窗口

<Window x:Class="Theming.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="Button"
               x:Key="ButtonGreenTextStyle">
            <Setter Property="Foreground"
                    Value="Green" />
        </Style>
    </Window.Resources>
    <Grid>
        <Button Style="{DynamicResource ButtonGreenTextStyle}" Content="Test" />
    </Grid>
</Window>

我必须做的是,WPF将理解我的泛型中的样式。xaml作为所有按钮的基本样式(我知道我还必须编写一个ControlTemplate;以上代码只是为了简单起见)

我想尝试两件事

    创建一个通用的ButtonBase样式/模板来设置所有的外观按钮
  • 尝试在ButtonGreeTextStyle上使用BasedOn属性,基于现有的样式。

我找到了另一个解决方案。您必须基于自定义标记编写样式:

这将应用当前主题样式。这个MarkupExtension的代码可以在这里找到:

我如何改变一个按钮的默认样式没有WPF从Aero恢复到经典?

相关内容

  • 没有找到相关文章

最新更新