2010-08-25 2 views
17

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

То, что я надеюсь сделать, это применить стиль ко всем моим кнопкам, которые также имеют дочерний элемент изображения.

ответ

23

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

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

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

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

Это очень крупнозернистый глобальный стиль - и вам нужно следовать конвенции, чтобы она работала.

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

+2

К сожалению, ссылка на Темы мертва. [Здесь] (http://blogs.msdn.com/b/wpfsdk/archive/2007/07/31/using-themes-with-custom-controls.aspx) является ссылкой на статью из MSDN по использованию тем, которые может быть аналогичным. –

5

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

, например

<Style TargetType="Button"> 

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

Если вы хотите применить его только к определенным типам кнопок (например, кнопкам с изображением), создайте тип, который происходит от (назовите его ImageButton), а затем создайте как tyle, нацеленный на этот тип.

+0

OK ... этот вид работ. Одна из моих кнопок, похоже, уважает это изменение, а другие - нет. Все они работают, если я даю стиль «x: Key», а затем явным образом вызываю его с каждой кнопки, используя «Style =» {StaticResource DisabledButton}. В любом случае я могу избежать необходимости добавлять явные ссылки на каждую кнопку? –

+0

Убедитесь, что словарь ресурсов, в котором этот стиль определен, находится в пределах области действия для всех кнопок, для которых требуется применить стиль. Размещение этого стиля в App.xaml будет видимым для всех кнопок в приложении. Движение ниже ограничит его видимость. –

2

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