Как панели инструментов WPF меняют стили своих кнопок? - PullRequest
2 голосов
/ 11 мая 2011

Если в WPF поместить кнопку внутри панели инструментов, кнопка автоматически получает другой стиль: по умолчанию нет границ, разные эффекты при наведении и т. Д. Какой механизм использует WPF для достижения этой цели?

Я знаю, как изменить стиль всех кнопок в программе, поместив Style TargetType="Button" в Ресурсы в App.xaml. Я знаю, как изменить стиль только кнопок на одной родительской панели, поместив тот же Style TargetType="Button" в ресурсы панели. Но я не знаю, как сделать его многоразовым, чтобы я мог применить его к нескольким различным панелям (но не ко всему приложению) и переустановить все кнопки на этих панелях.

Панель инструментов обладает магией, позволяющей многократно использовать стиль «Применим ко всем моим детям». Как это сделать?

1 Ответ

3 голосов
/ 11 мая 2011

Применяет стиль в 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;
    }
}
...