WPF工具栏如何更改其按钮的样式?

3
在WPF中,如果您将Button放置在ToolBar内部,则按钮会自动获取不同的样式:默认情况下没有边框,不同的悬停效果等。WPF使用什么机制来实现这一点呢?
我知道如何重新设计程序中的所有按钮,只需在App.xaml中的资源中添加Style TargetType="Button"即可。我知道如何仅在单个父面板中重新设计按钮,只需将相同的Style TargetType="Button"放入面板的资源中即可。但是,我不知道如何使其可重用,以便我可以将其应用于多个不同的面板(但不是整个应用程序),并使其重新设计这些面板中的所有按钮。
ToolBar有一个神奇的方式使“适用于所有子级”的样式可重用。它是如何做到的?
1个回答

4
它在一个名为PrepareContainerForItemOverride的样式中应用,看起来像这样:
protected override void PrepareContainerForItemOverride(DependencyObject element, object item) {
    base.PrepareContainerForItemOverride(element, item);
    FrameworkElement element2 = element as FrameworkElement;
    if (element2 != null) {
        // ...
        ResourceKey name = null;
        if (type == typeof(Button)) {
            name = ButtonStyleKey;
        }
        else if (type == typeof(ToggleButton)) {
            name = ToggleButtonStyleKey;
        }
        else if (type == typeof(Separator)) {
            name = SeparatorStyleKey;
        }
        // ...
         element2.DefaultStyleKey = name;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接