在XAML中设置全局样式

时间:2014-05-05 07:57:51

标签: c# wpf xaml

有没有办法在xaml中设置资源字典中的全局样式而不必在受影响的元素中指定任何特殊设置?

例如,假设我有 带有

的resdictionary.xaml文件
 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

 </ResourceDictionary>

然后我有正常的window.xaml文件:

<Window x:Class="App.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        
    Title="MainWindow" Height="500" Width="800" MinWidth="500" MinHeight="350">
<Window.Resources>
    <ResourceDictionary Source="resdictionary.xaml" />
</Window.Resources>   

 <Button Content="Button 1"/>
 <Button Content="Button 2"/>
 <Button Content="Button 3"/>
 </Window>

我希望所有按钮都有黑白背景渐变和Calibri字体。 有没有办法在resdictionary.xaml中指定它而不必更改window.xaml文件?

2 个答案:

答案 0 :(得分:2)

您可以创建styles.xaml页面并在那里添加所有样式,例如

<Style x:Key="SubmitButtonStyle" TargetType="Button">
    <Setter Property="Height">
        <Setter.Value>28px</Setter.Value>
    </Setter>
    <Setter Property="Width">
        <Setter.Value>90px</Setter.Value>
    </Setter>
    <Setter Property="BorderThickness">
        <Setter.Value>1</Setter.Value>
    </Setter>
    <Setter Property="BorderBrush">
        <Setter.Value>#000000</Setter.Value>
    </Setter>
    <Setter Property="Background">
        <Setter.Value>#0073c6</Setter.Value>
    </Setter>
    <Setter Property="FontFamily" >
        <Setter.Value>Segoe UI</Setter.Value>
    </Setter>
    <Setter Property="FontSize">
        <Setter.Value>12px</Setter.Value>
    </Setter>
</Style>

您可以使用以下代码在Windows中引用styles.xaml。

    <UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary  Source="../Resources/Styles.xaml"></ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

您可以在页面中以下列方式使用该样式

<Button Style="{StaticResource TelerikRadSubmitButtonStyle}"/>

希望这会有所帮助。

答案 1 :(得分:1)

您可以按 Dream Coder 显示的方式进行操作。但是这样你就必须为每个按钮设置style。如果您未将style设置为按钮,则button将使用默认的窗口样式。为此,您必须从x:Key删除style

<Style TargetType="{x:Type Button}">
    <Setter Property="Background">
        <Setter.Value>
             <LinearGradientBrush EndPoint="0.5,1"
                     StartPoint="0.5,0">
                <GradientStop Color="#000000" />
                <GradientStop Color="#FFFFFF"
                      Offset="1" />
             </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <Setter Property="FontFamily" 
            Value="Calibri" />
</Style>