【问题标题】:Consuming resources defined in WPF default themes使用 WPF 默认主题中定义的资源
【发布时间】:2014-08-14 17:22:03
【问题描述】:

我正在编写一个 WPF 自定义控件库并实现与 WPF 默认主题一致的主题,即在我的 WPF 自定义控件库项目的 Themes 文件夹中,我有一个名为 Aero.NormalColor.xaml 的资源字典,它将在 Aero 时使用.NormalColor 是桌面主题。

默认的 Aero.NormalColor 主题定义了我想在我的资源字典中使用的许多资源(它们可以从这里下载 http://go.microsoft.com/fwlink/?LinkID=158252)。

例如它定义了以下资源:

<LinearGradientBrush x:Key="ButtonNormalBackground" StartPoint="0,0" EndPoint="0,1">
    <LinearGradientBrush.GradientStops>
        <GradientStop Color="#F3F3F3" Offset="0"/>
        <GradientStop Color="#EBEBEB" Offset="0.5"/>
        <GradientStop Color="#DDDDDD" Offset="0.5"/>
        <GradientStop Color="#CDCDCD" Offset="1"/>
    </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

在我的 Aero.NormalColor.xaml 资源字典中,我尝试按如下方式使用此资源:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/PresentationFramework.Aero, 
        Version=4.0.0.0, 
        PublicKeyToken=31bf3856ad364e35;
        component/themes/aero.normalcolor.xaml" />
</ResourceDictionary.MergedDictionaries>

<Style x:Key="{x:Type myControls:MyControl}" TargetType="{x:Type myControls:MyControl}">
    <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
    ....

我明白这些资源可能会发生变化,因此可能不建议使用它们,但是我仍然想知道这是否可能,有什么想法吗?

【问题讨论】:

    标签: wpf xaml wpf-controls


    【解决方案1】:

    在反编译的 BAML 中找到的密钥(您可以使用此处建议的任何工具查看反编译的 BAML How to inspect and extract XAML style from WPF application?)与我通过问题中的链接下载的 XAML 文件中的密钥不对应,这是这不起作用的原因。

    在反编译的 BAML 中找到的密钥看起来像是被混淆了。使用混淆密钥时,可以消耗资源,但是,混淆这些密钥是反对首先这样做的另一个论据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多