Windows Phone 8.1 XAML - 覆盖 ResourceDictionary 条目

Windows Phone 8.1 XAML - Overriding ResourceDictionary entry

我正在使用一个库 (https://qkit.codeplex.com/) 在我的应用程序上实现一个 JumpList,我希望为组 header 元素覆盖它的默认边距。此边距在库代码中定义为资源字典中的资源:

<Thickness x:Key="JumpListHeaderItemMargin">19,0,0,9.5</Thickness>

如何覆盖此键的值?我已经尝试在我的应用程序上直接在库的 JumpList 元素下的资源字典中设置它,但它不起作用:

<q:AlphaJumpList Name="lineJumpList">
    <q:AlphaJumpList.Resources>
        <Thickness x:Key="JumpListHeaderItemMargin">0,0,0,9.5</Thickness>
    </q:AlphaJumpList.Resources>
    ...
</q:AlphaJumpList>

简答——你不能。

控件的作者决定这些值不是他们 public API 的一部分。如果他们愿意,他们可以在他们的控件上公开一个您可以从外部更改的 DependencyProperty。

最简单的解决方法——克隆组件的源代码,将 QKit 项目添加到您的解决方案中,然后根据需要更改 QKit\Themes\generic。xaml。

如果您不想这样做,可以将 generic.xaml 复制到例如qkit.xaml 在您的项目中,然后根据需要更改 JumpListHeaderItemMargin 值,然后将 merge qkit.xaml 更改为 app.xaml 或您使用该控件的页面上的资源。这样就不会使用 DLL 中的 generic.xaml,因为控件的本地定义样式将覆盖 DLL 中的 generic.xaml.