WPF样式深层嵌套元素

时间:2018-06-17 10:52:38

标签: wpf

我无法覆盖我以干净方式使用的第三方组件的默认样式属性。可视树看起来像这样:

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,以便能够编辑最里面的子项。但我不想定义组件AZ之间的所有资源,只是为了添加一个简单的样式。我有什么选择?

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解你的问题,因为你提供了一个可行的答案,我不明白为什么WPF强迫你'定义组件A到Z'之间的所有资源。 / p>

但是,这是一个提示:

您可以创建一个继承Z并覆盖OnApplyTemplate()的自定义控件。当调用OnApplyTemplate()时,您可以保证应用了模板,因此您可以找到所需的任何子控件(您的文本框)。 (如果您不知道如何,只需google for例如'wpf按名称查找子控件'。)一旦有了文本框,就可以更改其代码包装。 我必须自定义一次Ribbon控件,这种方法大大简化了任务。