WPF:基于单独部件中另一个部件的样式

WPF:基于单独部件中另一个部件的样式,wpf,resources,styles,resourcedictionary,mergeddictionaries,Wpf,Resources,Styles,Resourcedictionary,Mergeddictionaries,程序集A-ResourceDictionary包含StyleA样式 程序集B-ResourceDictionary.MergedDictionaries将程序集A中的资源合并到B中。 我想在程序集B中基于StyleA创建一个样式。可能吗 我试图创造这种风格: <Style x:Key="StyleB" BasedOn="{StaticResource StyleA}"> <Setter Property="Button.Foreground" Value="Khaki"/

程序集A-ResourceDictionary包含StyleA样式
程序集B-ResourceDictionary.MergedDictionaries将程序集A中的资源合并到B中。

我想在程序集B中基于StyleA创建一个样式。可能吗

我试图创造这种风格:

<Style x:Key="StyleB" BasedOn="{StaticResource StyleA}">
   <Setter Property="Button.Foreground" Value="Khaki"/>
</Style>

但是如果我使用StyleB,我在运行时会得到一个XamlParseException异常:


无法将属性“Style”中的值转换为类型为“System.Windows.Style”的对象。只能基于目标类型为基类型“IFrameworkInputElement”的样式。标记文件“SamSeekApp”中的对象“System.Windows.Controls.Button”处出错;component/mainwindow.xaml'

尝试将TargetType=“{x:Type Button}”添加到“StyleB”中。

谢谢。它起作用了!但是为什么不指定类型它就不能工作呢?抱歉,我不知道为什么这里需要它。因为WPF需要知道您的样式的目标类型,以便它可以检查您覆盖的属性等。即使父(BasedOn)样式声明了目标类型,您仍然需要在子样式中重新声明目标类型这太棒了:-)请注意,在为控件“就地”定义样式时,这也很有效,您可能需要在其上设置DataTriggers