我无法覆盖我以干净方式使用的第三方组件的默认样式属性。可视树看起来像这样:
A
--B
...
------------Z
--------------TextBlock
我试图像这样覆盖TextBlock
的样式:
<Style
TargetType="A">
<Style.Resources>
<Style
TargetType="TextBlock">
<Setter
Property="TextWrapping"
Value="Wrap" />
</Style>
</Style.Resources>
</Style>
但这不起作用。在实时可视化树中,我确认组件A
看到了我的自定义样式,但TextBlock
没有看到它。但是,当我尝试:
<Style
TargetType="Z">
<Style.Resources>
<Style
TargetType="TextBlock">
<Setter
Property="TextWrapping"
Value="Wrap" />
</Style>
</Style.Resources>
</Style>
虽然有效。因此,在我看来,WPF强迫我将所有子组件逐个添加为Style.Resources
,以便能够编辑最里面的子项。但我不想定义组件A
到Z
之间的所有资源,只是为了添加一个简单的样式。我有什么选择?
答案 0 :(得分:0)
我不确定我是否完全理解你的问题,因为你提供了一个可行的答案,我不明白为什么WPF强迫你'定义组件A到Z'之间的所有资源。 / p>
但是,这是一个提示:
您可以创建一个继承Z并覆盖OnApplyTemplate()的自定义控件。当调用OnApplyTemplate()时,您可以保证应用了模板,因此您可以找到所需的任何子控件(您的文本框)。 (如果您不知道如何,只需google for例如'wpf按名称查找子控件'。)一旦有了文本框,就可以更改其代码包装。 我必须自定义一次Ribbon控件,这种方法大大简化了任务。