XAML限制合并的ResourceDictionaries中样式的可见性

时间:2017-09-27 13:15:52

标签: wpf xaml resourcedictionary

我正在开发一个WPF应用程序,它使用存储在许多资源字典中的样式,在App.xaml中引用,我一直在努力限制内部使用的样式的可见性,以构建控件模板。

假设我有ResourceDictionary名为ButtonStyles,其中包含以下内容:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="ButtonInternalStyles.xaml" />
</ResourceDictionary.MergedDictionaries>

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource SomeInternalStyle}">
    <!--Setters-->
</Style>

我还有一个名为ResourceDictionary的{​​{1}},其中包含:

ButtonInternalStyles

我的App.xaml仅引用<Style x:Key="SomeInternalStyle" TargetType="{x:Type Button}"> <!--Setters--> </Style> ButtonStyles,但我可以在我的观看中使用ResourceDictionary,我不希望这样做。

有没有办法限制SomeInternalStyle的展示率,所以我只能在ButtonInternalStyles中使用它?

1 个答案:

答案 0 :(得分:2)

  

有没有办法限制ButtonInternalStyles的可见性,所以我只能在ButtonStyles中使用它?

不,我认为你不能这样做。 ResourceDictionary中定义的所有资源合并到另一个确实在范围内的ResourceDictionary中的资源也将在范围内。这就是资源字典的工作方式。

我真的没有看到这个问题。如果您想阻止ResourceDictionary的消费者意外使用您的“内部”风格,您可能会给它一些难以猜测的名称,例如:

<Style x:Key="ffdsghdfsgh" TargetType="{x:Type Button}">
...

当然,如果您使用一些提供IntelliSense支持的Visual Studio工具,这将无济于事,我认为您最好不要更改样式的名称。这不值得努力。