在WPF中为所有Windows中的按钮应用样式

时间:2013-05-13 20:01:55

标签: wpf xaml button styles

我在XAML中设置了一个样式设置,用于在我的WPF窗口中创建圆角Button。我希望这种样式适用于我的应用程序中所有窗口上的所有按钮。

有没有一种方法,类似于CSS,我可以把它放到另一个文件中并以某种方式在我的所有窗口中引用它?或者我每次都需要复制并粘贴它。

4 个答案:

答案 0 :(得分:61)

如果您想以干净的方式进行,可以创建一个ResourceDictionary.xaml,它与Web设计中的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属性。这意味着你需要告诉按钮,从你覆盖它的那一刻起他需要做的每一个动作。见here。所以,在一个小而简化的概念中,你想写下这样的东西:

<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>

在这里看到我覆盖绘制基本功能按钮所需的所有基本属性,例如ForegroundBackgroundWidth ...和MouseOver事件,将鼠标移到它上面时改变颜色。 CornerRadius Border内的ControlTemplate属性是您要查找的半径。

所以基本上,你要覆盖所有按钮默认出现的border属性。

答案 1 :(得分:36)

您可以使用应用程序资源来执行此操作。

以下是一些代码(在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 :(得分:2)

Google参考词典。你可以将所有款式都放在那里。然后,只需在窗口/用户控件中添加一个“引用”。

    <UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/SialTPChat.UI.Design;component/Styles/Styles.xaml" />
    </ResourceDictionary>
    </UserControl.Resources>

现在,上面引用的XAML文件中的所有样式都将应用于用户控件中的所有对象。

答案 3 :(得分:2)

根据我的最简单的方法是:

  1. 右键单击设计图面中的按钮

  2. 选择修改模板 - &gt;编辑副本

  3. 选择&#34;在应用程序中定义&#34;单选按钮

  4. 该样式将在App.xaml文件中创建

  5. 使用&#34; style&#34;将该资源添加到每个按钮标签