Применить стиль для кнопок во всех Windows в WPF
У меня есть настройка стиля в моем XAML для создания круглого угла Button
в моем окне WPF. Я бы хотел, чтобы этот стиль применялся ко всем кнопкам во всех окнах моего приложения.
Есть ли способ, похожий на CSS, что я могу поместить его в другой файл и каким-то образом ссылаться на него во всех моих окнах? Или мне просто нужно копировать и вставлять его каждый раз.
Ответы
Ответ 1
Вы можете использовать ресурсы приложения для этого.
Вот немного кода, например (в app.xaml)
<Application.Resources>
<Style TargetType="Button" x:Key="GelButton" >
<Setter Property="Margin" Value="1,2,1,2"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
</Application.Resources>
а затем для ваших кнопок (например):
<Button Height="50" Width="250" Style="{StaticResource GelButton}" Content="Button 1" />
<Button Height="50" Width="250" Style="{StaticResource GelButton}" Content="Button 2" />
Надеюсь, это поможет вам найти то, что вы ищете.
Ответ 2
Если вы хотите сделать это чистым способом, вы можете создать ResourceDictionary.xaml
, который имеет ту же функцию, что CSS
в веб-дизайне.
Сначала перейдите в свой проект и добавьте ResourceDictionary
. Внутри вы можете добавлять стили для всех желаемых элементов, например, изменить цвет фона Button
, который применяется ко всем вашим кнопкам:
// Base style for all buttons
<Style TargetType="Button">
<Setter Property="Background" Value="Red" />
</Style>
Если вы не укажете идентификатор на каждом Style
, этот стиль будет применяться ко всем элементам управления, которые соответствуют TargetType
, который вы указали. Если вы хотите, чтобы кнопка выглядела по-другому, вы можете сделать то же самое, что и выше, но также включать в себя идентификатор этого стиля, который будет использоваться каждой другой кнопкой:
// Specific style for blue buttons
<Style TargetType="Button" x:Key="BlueButton">
<Setter Property="Background" Value="Blue" />
</Style>
Затем на каждом .xaml
, который вы хотите применить к стилям, вы должны добавить ссылку на этот ResourceDictionary.xaml
, который вы создаете:
<Window.... >
<Window.References>
<ResourceDictionary>
<ResourceDictionary Source="MyResourceDictionary.xaml" />
</ResourceDictionary>
</Window.References>
<Grid>
<Button Content="Button with red background" />
<Button Style="{StaticResource BlueButton}" Content="Button with blue background" />
</Grid>
</Window>
Я думаю, что это то, что вы ищете.
Если вы хотите нарисовать закругленную кнопку, вам необходимо переопределить свойство Template
кнопки. Это означает, что вам нужно сообщить кнопке все действия, которые необходимо выполнить с момента ее замены. См. здесь. Итак, в небольшой и сокращенной концепции вы хотели бы написать что-то вроде этого:
<Style TargetType="Button">
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Background" Value="DarkBlue" />
<Setter Property="Width" Value="150" />
<Setter Property="Height" Value="35" />
<Setter Property="FontSize" Value="16" />
<Setter Property="FontFamily" Value="Calibri" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}"
BorderBrush="LightBlue" BorderThickness="1" CornerRadius="15,0,15,0" x:Name="bd">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="LightGray"/>
<Setter Property="Foreground" Value="White" />
<Setter Property="Cursor" Value="Hand" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Смотрите, что здесь я переопределяю все основные свойства, необходимые для рисования базовой функциональной кнопки, например Foreground
, Background
, Width
... и события MouseOver
, чтобы изменить цвет при прокрутке мыши над ним. Свойством CornerRadius
Border
внутри ControlTemplate
является радиус, который вы ищете.
В основном, вы переопределяете свойство border, которое по умолчанию используется для всех кнопок.
Ответ 3
Справочный словарь Google. Вы можете разместить все свои стили. затем просто добавьте ссылку на него в вашем окне/пользовательском элементе управления.
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/SialTPChat.UI.Design;component/Styles/Styles.xaml" />
</ResourceDictionary>
</UserControl.Resources>
Теперь все стили в вышеупомянутом файле XAML, на который ссылается, будут применены ко всем объектам в пользовательском элементе управления.
Ответ 4
Самый легкий способ по мне:
-
Щелкните правой кнопкой мыши по кнопке на поверхности дизайна
-
Выберите "Редактировать шаблон" → "Редактировать копию"
-
Выберите переключатель "Определить в приложении"
-
Стиль будет создан в файле App.xaml
-
Добавьте этот ресурс каждой кнопке, используя тег