WPF - глобальный стиль?

Есть ли способ настроить глобальные стили для моего приложения WPF?

Я надеюсь применить стиль ко всем моим кнопкам, у которых также есть дочерний элемент Image.


person Sonny Boy    schedule 25.08.2010    source источник


Ответы (3)


Что ж, вроде - это универсальный подход, который вы можете сделать - поместите следующий элемент в свой App.xaml - все ваши кнопки изменятся (кроме тех, к которым вы применяете стиль вручную).

<Style TargetType="{x:Type Button}">
    <Setter Property="Background" Value="LightPink"/> <!-- You should notice that one... -->
</Style>

Однако, если вы хотите нажимать только кнопки с изображениями - вам нужно наследовать от Button каждый раз, когда вы это делаете, а затем применять такой стиль:

public class CustomImageButton:Button{}
<Style TargetType="{x:Type local:CustomImageButton}">
    <Setter Property="Background" Value="LimeGreen"/>
</Style>
<local:CustomImageButton Content="ClickMe"/>

Это очень грубый глобальный стиль, и вам нужно следовать соглашению, чтобы оно работало.

Альтернативой является использование тем - подробнее об этом здесь.

person Goblin    schedule 25.08.2010
comment
К сожалению, ссылка на Темы мертва. Здесь - это ссылка на статью из MSDN об использовании похожих тем. - person Jon Peterson; 30.06.2015

Вы можете делать неявные стили в WPF, которые применяются по типу

например

<Style TargetType="Button">

Будет применяться ко ВСЕМ кнопкам в рамках этого стиля (если стиль находится в App.XAML, он будет применяться ко всем кнопкам, если он ниже в цепочке, он будет применяться ко всем кнопкам под ним)

Если вы хотите применить его только к определенным типам кнопок (например, imagebuttons), создайте тип, производный от кнопки (назовите его ImageButton), а затем создайте стиль, предназначенный для этого типа.

person Brad Cunningham    schedule 25.08.2010
comment
ОК ... такого рода работы. Одна из моих кнопок, кажется, уважает это изменение, но другие нет. Все они работают, если я присваиваю стилю x:Key, а затем вызываю его явно из каждой кнопки с помощью Style="{StaticResource DisabledButton}". В любом случае я могу избежать добавления явной ссылки на каждую кнопку? - person Sonny Boy; 26.08.2010
comment
Убедитесь, что словарь ресурсов, в котором определен этот стиль, находится в пределах области действия всех кнопок, к которым вам нужно применить стиль. Размещение этого стиля в App.xaml будет видно всем кнопкам в приложении. Перемещение ниже ограничит его видимость. - person Brad Cunningham; 26.08.2010

Поместите стиль в тег ResourceDictionary внутри вашего App.xaml, и он будет применяться ко всему приложению.

person samkass    schedule 25.08.2010