资源

资源

  从样式示例可以看出,样式通常存储在资源中。可以在资源中定义任意元素,例如,前面从按钮的背景样式创建了笔刷,它本身就可以定义为一个资源,这样就可以在需要笔刷的地方使用它了。

  下面的示例在StackPanel资源中定义了LinearGradientBrush,它的键名是MyGradientBrush使用StaticResource标记扩展将Background属性赋予MyGradientBrush资源。

<Window x:Class="样式模版和资源.资源"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="资源" Height="300" Width="300">
    <StackPanel>
        <StackPanel.Resources>
            <LinearGradientBrush x:Key="MyGradientBrush" StartPoint="0.5,0" EndPoint="0.5,1">
                    <GradientStop Offset="0.0" Color="LightCyan"/>
                    <GradientStop Offset="0.14" Color="Cyan"/>
                    <GradientStop Offset="0.7" Color="DarkCyan"/>
            </LinearGradientBrush>
        </StackPanel.Resources>
        <Button Name="button1" Width="200" Height="50" Foreground="White" Background="{StaticResource MyGradientBrush}">
            Click Me!
        </Button>
    </StackPanel>
</Window>

  这里,资源用StackPanel定义。在上面的例子中, 资源用Window元素定义。基类FrameworkElement定义了ResourceDictionary类型的Resources属性。这就是资源可以用派生自FrameworkElement的所有类(任意WPF元素)来定义的原因。

  资源是按层次结构来搜索的。如果用Window元素定义资源,它就会应用于Window的所有子元素。如果Window包含一个Grid,该Grid包含一个StackPanel,资源是用于StackPanel定义的,该资源就会应用于StackPanel中的所有控件。如果StackPanel包含一个按钮,但只为该按钮定义了资源,这个样式就只对该按钮有效。

  1.系统资源

    还有许多系统级的颜色和字体资源,可用于所有应用程序。这些资源用SystemColors,SystemFonts和SystemParameters类定义。

   2.在代码中访问资源

    要在后台代码中访问资源,基类FrameworkElement实现了方法FindResource(),可以给每个WPF对象调用方法FindResource().

  3. 动态资源

    在StaticResource标记扩展中,资源是在加载期间搜索。如果在运行程序中改变了资源,就应使用DynamicResource标记扩展。

 

  

posted @ 2016-01-06 09:19  幽弥狂233  阅读(186)  评论(0编辑  收藏  举报